MySQL8.0安装配置手册

版权说明:本文系博主通过各种渠道学习整理发表或者全文转载自其他平台,作为学习笔记,不能保证所有知识点是完全正确以及表达无误,用于生产环境配置时请斟酌。如有错误或建议请联系。转载请注明出处,侵删联系:linuxops@qq.com。感谢各位!

一、前言

MySQL是一个开放源码的小型关联式数据库管理系统,开发者为瑞典MySQL AB公司。目前MySQL被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、总体拥有成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。

mysql是使用C和C++编写的,并且使用了多种编译器进行测试,保证源代码的可移植性,支持众多操作系统,例如Linux、Windows、MacOS等,并且也支持众多的编程语言。

关于mysql的一些基本概念这里不详细展开了,相信这个世界级的数据库软件或多或少你都了解一下。

之前写过5.7版本的编译安装手册,因为博客迁移,所以整理了一下,时至8.0版本发布,所以本文将以8.0为目标来重新修改之前5.7的博文。

我们会谈到8.0的一些新特性,还会讲到如何编译安装,以及编译的一些常用的参数,mysql的优化和主从复制以及binlog管理等等常用的知识点。

环境准备

  • 云服务器提供商:华为云
  • CPU:8核
  • 内存:16G
  • 硬盘:1T
  • MySQL版本:8.0.11

MySQL8.0需要用gcc的版本为 4.8以上,以及一些依赖,通过yum install -y ncurses ncurses-devel libaio glibc gcc-c++ cmake make openssl-devel 安装依赖。

安装完成之后通过gcc -v 查看gcc的版本


二、MySQL的安装

准备用户

为了系统安全,通常我们都不用root用户运行mysql,我们创建mysql用户。

[root@MySQL ~]# gropuadd mysql #添加用户组
[root@MySQL ~]# useradd mysql -g mysql -s /sbin/nologin #创建用户,不允许登录

下载MySQL

[root@MySQL ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11.tar.gz
--2018-05-18 16:06:37--  https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-8.0.11.tar.gz
Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11.tar.gz [following]
--2018-05-18 16:06:38--  https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.11.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)... 23.55.208.125
Connecting to cdn.mysql.com (cdn.mysql.com)|23.55.208.125|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 79361578 (76M) [application/x-tar-gz]
Saving to: ‘mysql-8.0.11.tar.gz’

100%[========================================>] 79,361,578  16.0MB/s   in 5.8s   

2018-05-18 16:06:44 (13.0 MB/s) - ‘mysql-8.0.11.tar.gz’ saved [79361578/79361578]

[root@MySQL ~]# wget https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.11.tar.gz
--2018-05-18 16:06:47--  https://dev.mysql.com/get/Downloads/MySQL-8.0/mysql-boost-8.0.11.tar.gz
Resolving dev.mysql.com (dev.mysql.com)... 137.254.60.11
Connecting to dev.mysql.com (dev.mysql.com)|137.254.60.11|:443... connected.
HTTP request sent, awaiting response... 302 Found
Location: https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.11.tar.gz [following]
--2018-05-18 16:06:48--  https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-boost-8.0.11.tar.gz
Resolving cdn.mysql.com (cdn.mysql.com)... 23.55.208.125
Connecting to cdn.mysql.com (cdn.mysql.com)|23.55.208.125|:443... connected.
HTTP request sent, awaiting response... 200 OK
Length: 77647598 (74M) [application/x-tar-gz]
Saving to: ‘mysql-boost-8.0.11.tar.gz’

100%[========================================>] 77,647,598  16.0MB/s   in 5.8s   

2018-05-18 16:06:55 (12.7 MB/s) - ‘mysql-boost-8.0.11.tar.gz’ saved [77647598/77647598]

[root@MySQL ~]# 

编译安装

解压

[root@MySQL ~]# tar -zxvf mysql-8.0.11.tar.gz
[root@MySQL ~]# tar -zxvf mysql-boost-8.0.11.tar.gz

编译

[root@MySQL ~]# cd mysql-8.0.11 #进入源码目录
[root@MySQL mysql-8.0.11]# cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql  \
> -DMYSQL_DATADIR=/data/mysqldata -DSYSCONFDIR=/usr/local/mysql/etc \ 
> -DWITH_INNOBASE_STORAGE_ENGINE=1   \
> -DMYSQL_TCP_PORT=3306   \
> -DENABLED_LOCAL_INFILE=1   \
> -DEXTRA_CHARSETS=all   \
> -DDEFAULT_CHARSET=utf8   \
> -DDEFAULT_COLLATION=utf8_general_ci  \
> -DWITH_BOOST=./boost/boost_1_66_0/

-- Build files have been written to: /root/mysql-8.0.11

[root@MySQL mysql-8.0.11]# make -j `grep pro /proc/cpuinfo | wc -l` #指定使用CPU核心数编译

[100%] Built target pfs_connect_attr-t
[100%] Built target mysqld

[root@MySQL mysql-8.0.11]# make install #编译成功后安装

-- Installing: /usr/local/mysql/support-files/mysqld_multi.server
-- Installing: /usr/local/mysql/support-files/mysql-log-rotate
-- Installing: /usr/local/mysql/support-files/magic
-- Installing: /usr/local/mysql/share/aclocal/mysql.m4
-- Installing: /usr/local/mysql/support-files/mysql.server

cmake参数中-DMYSQL_DATADIR,-DSYSCONFDIR,-DWITH_BOOST分别指定了数据库文件的存放目录、配置文件扫描目录以及boost的目录。

具体的cmake支持的编译参数如下:

格式 描述 默认 介绍 删除
BUILD_CONFIG 使用与官方发布相同的构建选项
BUNDLE_RUNTIME_LIBRARIES 用Windows服务器MSI和Zip包捆绑运行时库 OFF 8.0.11
CMAKE_BUILD_TYPE 生产类型 RelWithDebInfo
CMAKE_CXX_FLAGS C ++编译器的标志
CMAKE_C_FLAGS C编译器的标志
CMAKE_INSTALL_PREFIX 安装基础目录 /usr/local/mysql
COMPILATION_COMMENT 关于编译环境的评论
CPACK_MONOLITHIC_INSTALL 包构建是否生成单个文件 OFF
DEFAULT_CHARSET 默认的服务器字符集 utf8mb4
DEFAULT_COLLATION 默认的服务器排序规则 utf8mb4_0900_ai_ci
DISABLE_DATA_LOCK 排除性能模式数据锁定检测 OFF
DISABLE_PSI_COND 排除性能模式条件检测 OFF
DISABLE_PSI_ERROR 排除性能架构服务器错误检测 OFF
DISABLE_PSI_FILE 排除性能模式文件工具 OFF
DISABLE_PSI_IDLE 排除性能模式空闲检测 OFF
DISABLE_PSI_MEMORY 排除性能架构内存工具 OFF
DISABLE_PSI_METADATA 排除性能架构元数据工具 OFF
DISABLE_PSI_MUTEX 排除性能模式互斥体检测 OFF
DISABLE_PSI_PS 排除性能模式准备语句 OFF
DISABLE_PSI_RWLOCK 排除性能模式rwlock检测 OFF
DISABLE_PSI_SOCKET 排除性能模式套接字检测 OFF
DISABLE_PSI_SP 排除性能模式存储程序工具 OFF
DISABLE_PSI_STAGE 排除性能架构阶段检测 OFF
DISABLE_PSI_STATEMENT 排除性能模式语句检测 OFF
DISABLE_PSI_STATEMENT_DIGEST 排除性能模式语句摘要检测 OFF
DISABLE_PSI_TABLE 排除性能模式表检测 OFF
DISABLE_PSI_THREAD 排除性能架构线程检测 OFF
DISABLE_PSI_TRANSACTION 排除性能架构事务检测 OFF
DISABLE_SHARED 不要构建共享库,编译依赖于位置的代码 OFF
DOWNLOAD_BOOST 是否下载Boost库 OFF
DOWNLOAD_BOOST_TIMEOUT 用于下载Boost库的超时时间 600
ENABLED_LOCAL_INFILE 是否为LOAD DATA INFILE启用LOCAL OFF
ENABLED_PROFILING 是否启用查询分析代码 ON
ENABLE_DEBUG_SYNC 是否启用调试同步支持 ON 8.0.1
ENABLE_DOWNLOADS 是否下载可选文件 OFF
ENABLE_DTRACE 是否包含DTrace支持 8.0.1
ENABLE_EXPERIMENTAL_SYSVARS 是否启用实验InnoDB系统变量 OFF 8.0.11
ENABLE_GCOV 是否包含gcov支持
ENABLE_GPROF 启用gprof(仅限优化的Linux版本) OFF
FORCE_UNSUPPORTED_COMPILER 是否允许不受支持的编译器 OFF
IGNORE_AIO_CHECK 使用-DBUILD_CONFIG = mysql_release,忽略libaio检查 OFF
INSTALL_BINDIR 用户可执行文件目录 PREFIX/bin
INSTALL_DOCDIR 文档目录 PREFIX/docs
INSTALL_DOCREADMEDIR README文件目录 PREFIX
INSTALL_INCLUDEDIR 头文件目录 PREFIX/include
INSTALL_INFODIR 信息文件目录 PREFIX/docs
INSTALL_LAYOUT 选择预定义安装布局 STANDALONE
INSTALL_LIBDIR 库文件目录 PREFIX/lib
INSTALL_MANDIR 手册页目录 PREFIX/man
INSTALL_MYSQLKEYRINGDIR keyring_file插件数据文件的目录 platform specific
INSTALL_MYSQLSHAREDIR 共享数据目录 PREFIX/share
INSTALL_MYSQLTESTDIR mysql-test目录 PREFIX/mysql-test
INSTALL_PKGCONFIGDIR mysqlclient.pc的目录pkg-config文件 INSTALL_LIBDIR/pkgconfig
INSTALL_PLUGINDIR 插件目录 PREFIX/lib/plugin
INSTALL_SBINDIR 服务器可执行目录 PREFIX/bin
INSTALL_SECURE_FILE_PRIVDIR secure_file_priv默认值 platform specific
INSTALL_SHAREDIR aclocal / mysql.m4安装目录 PREFIX/share
INSTALL_STATIC_LIBRARIES 是否安装静态库 ON
INSTALL_SUPPORTFILESDIR 额外的支持文件目录 PREFIX/support-files
LINK_RANDOMIZE 是否随机化mysqld二进制中的符号顺序 OFF 8.0.1
LINK_RANDOMIZE_SEED LINK_RANDOMIZE选项的种子值 mysql 8.0.1
MAX_INDEXES 每个表的最大索引 64
MUTEX_TYPE InnoDB互斥类型 event
MYSQLX_TCP_PORT X插件使用的TCP / IP端口号 33060
MYSQLX_UNIX_ADDR X插件使用的Unix套接字文件 /tmp/mysqlx.sock
MYSQL_DATADIR 数据目录
MYSQL_MAINTAINER_MODE 是否启用MySQL维护者特定的开发环境 OFF
MYSQL_PROJECT_NAME Windows / OS X项目名称 MySQL
MYSQL_TCP_PORT TCP / IP端口号 3306
MYSQL_UNIX_ADDR Unix套接字文件 /tmp/mysql.sock
ODBC_INCLUDES ODBC包含目录
ODBC_LIB_DIR ODBC库目录
OPTIMIZER_TRACE 是否支持优化器跟踪
REPRODUCIBLE_BUILD 特别注意创建独立于构建位置和时间的构建结果 8.0.11
SYSCONFDIR 选项文件目录
SYSTEMD_PID_DIR systemd下PID文件的目录 /var/run/mysqld
SYSTEMD_SERVICE_NAME systemd下MySQL服务的名称 mysqld
TMPDIR tmpdir默认值
USE_LD_GOLD 是否使用GNU黄金装载机 ON 8.0.0
WIN_DEBUG_NO_INLINE 是否禁用函数内联 OFF
WITHOUT_SERVER 不要构建服务器 OFF
WITHOUT_xxx_STORAGE_ENGINE 从构建中排除存储引擎xxx
WITH_ANT 用于构建GCS Java包装的Ant的路径 8.0.11
WITH_ASAN 启用AddressSanitizer OFF
WITH_ASAN_SCOPE 启用AddressSanitizer -sanitize-address-use-scope-after-scope-clang标志 OFF 8.0.4
WITH_AUTHENTICATION_LDAP 如果无法构建LDAP认证插件,是否报告错误 OFF 8.0.2
WITH_AUTHENTICATION_PAM 构建PAM认证插件 OFF
WITH_AWS_SDK 亚马逊网络服务软件开发工具包的位置 8.0.2
WITH_BOOST Boost库源的位置
WITH_CLIENT_PROTOCOL_TRACING 构建客户端协议跟踪框架 ON
WITH_CURL 卷曲库的位置 8.0.2
WITH_DEBUG 是否包含调试支持 OFF
WITH_DEFAULT_COMPILER_OPTIONS 是否使用默认编译器选项 ON
WITH_DEFAULT_FEATURE_SET 是否使用默认功能集 ON
WITH_EDITLINE 使用哪个libedit / editline库 bundled
WITH_ICU ICU支持的类型 bundled 8.0.4
WITH_INNODB_EXTRA_DEBUG 是否包含对InnoDB的额外调试支持。 OFF
WITH_INNODB_MEMCACHED 是否生成memcached共享库。 OFF
WITH_KEYRING_TEST 构建密钥环测试程序 OFF
WITH_LIBEVENT 使用哪个libevent库 bundled
WITH_LIBWRAP 是否包含libwrap(TCP封装)支持 OFF
WITH_LZ4 LZ4库支持的类型 bundled
WITH_LZMA LZMA库支持的类型 bundled 8.0.4
WITH_MECAB 编译MeCab
WITH_MSAN 启用MemorySanitizer OFF
WITH_MSCRT_DEBUG 启用Visual Studio CRT内存泄漏跟踪 OFF
WITH_NUMA 设置NUMA内存分配策略
WITH_PROTOBUF 哪个协议缓冲区包要使用 bundled
WITH_RAPID 是否构建快速开发周期插件 ON
WITH_RE2 RE2库支持的类型 bundled 8.0.4
WITH_SSL SSL支持的类型 system
WITH_SYSTEMD 启用systemd支持文件的安装 OFF
WITH_SYSTEM_LIBS 设置库选项的系统值没有明确设置 OFF 8.0.11
WITH_TEST_TRACE_PLUGIN 构建测试协议跟踪插件 OFF
WITH_TSAN 启用ThreadSanitizer OFF
WITH_UBSAN 启用未定义行为清洁程序 OFF
WITH_UNIT_TESTS 用单元测试编译MySQL ON
WITH_UNIXODBC 启用unixODBC支持 OFF
WITH_VALGRIND 是否在Valgrind头文件中编译 OFF
WITH_ZLIB zlib支持的类型 bundled
WITH_xxx_STORAGE_ENGINE 将存储引擎xxx静态编译到服务器中

检查安装目录

[root@MySQL mysql-8.0.11]# cd /usr/local/mysql/ && ls -la
total 640
drwxr-xr-x  10 root root   4096 May 18 16:37 .
drwxr-xr-x. 13 root root   4096 May 18 16:37 ..
drwxr-xr-x   2 root root   4096 May 18 16:37 bin
drwxr-xr-x   2 root root   4096 May 18 16:37 docs
drwxr-xr-x   3 root root   4096 May 18 16:37 include
drwxr-xr-x   4 root root   4096 May 18 16:37 lib
-rw-r--r--   1 root root 301518 Apr  8 14:44 LICENSE
-rw-r--r--   1 root root 301518 Apr  8 14:44 LICENSE-test
drwxr-xr-x   4 root root   4096 May 18 16:37 man
drwxr-xr-x  10 root root   4096 May 18 16:37 mysql-test
-rw-r--r--   1 root root    687 Apr  8 14:44 README
-rw-r--r--   1 root root    687 Apr  8 14:44 README-test
drwxr-xr-x  28 root root   4096 May 18 16:37 share
drwxr-xr-x   2 root root   4096 May 18 16:37 support-files

如上,虽然我们在编译的时候指定了配置文件扫描的目录为etc,但是在安装目录中并没有发现有etc的文件夹,也没有发现配置文件,这个文件夹和配置文件需要我们自己手动创建。


三、配置MySQL

创建目录和配置文件

[root@MySQL mysql]# mkdir -p /usr/local/mysql/etc
[root@MySQL mysql]# cat > /usr/local/mysql/etc/my.cnf << EOF
> [mysql]
> ; 设置mysql客户端默认字符集
> default-character-set=utf8
> [mysqld]
> ;设置3306端口
> port = 3306 
> ; 设置mysql的安装目录
> basedir=/usr/local/mysql
> ; 设置mysql数据库的数据的存放目录
> datadir=/data/mysqldata
> ; 允许最大连接数
> max_connections=200
> ; 服务端使用的字符集默认为8比特编码的latin1字符集
> character-set-server=utf8
> ; 创建新表时将使用的默认存储引擎
> default-storage-engine=INNODB
> EOF

MySQL配置文件条目很多,这边我们设置了常用的必须的一些配置项,如上,我们设置了mysql的监听端口、socket、安装目录、数据库文件存放目录等等配置。

MySQL的配置也是分段配置的,每一个段都有一个名称,例如上面的配置[mysql] 配置了mysql工具的默认设置,[mysqld]则为MySQL服务器的配置

MySQL配置项众多,对于每一个配置项官方都提供了一个默认值,如果你不确定使用它,可以不在配置文件中体现,这样MySQL会读取默认配置。

当然,如果你无法确定MySQL提供了那些配置,或者不确定配置项的名称,你可以通过mysqld --verbose --help 命令查看,配合grep你会快速找到你想要的内容。

下面介绍一些常用的配置。

配置 说明 示例
[client] 配置项的模块名称,这里设置了客户端的默认配置 [client]
port 设置客户端默认访问的端口号 port = 3309
socket 设置客户端默认连接的OCKET socket = /var/lib/mysql/mysql.sock
[mysqld] 配置项的模块名称,这里设置了服务端的配置 [mysqld]
port 设置服务器监听的端口号 port = 3309
socket 设置服务器的socket文件 socket = /var/lib/mysql/mysql.sock
pid-file 设置服务器的PID文件 pid-file = /var/lib/mysql/mysql.pid
basedir 设置mysql安装目录 basedir = /usr/local/mysql
datadir 设置mysql 数据库文件的目录 datadir = /data/mysqldata
tmpdir 设置缓存目录,缓存目录用于存储临时表和临时文件 tmpdir = /data/mysql/tmp
slave-load-tmpdir 从服务器创建临时文件的目录名。该选项默认等于tmpdir系统变量的值。应指向基于硬盘的文件系统,而非基于内存的文件系统 slave-load-tmpdir = /home/mysql/mysql/tmp/
skip-name-resolve 禁止DNS解析,如果启用这项,那么mysql.user表中基于主机的授权将无法使用,如果没有禁止DNS解析,那么通过IP连接会报Name or service not know错误。 skip-name-resolve
default-authentication-plugin 设置密码认证插件,mysql8.0提供了mysql_native_passwordcaching_sha2_password两种密码认证,默认为caching_sha2_password default-authentication-plugin = mysql_native_password
skip-slave-start 告诉从服务器当服务器启动时不启动从服务器线程。使用START SLAVE语句在以后启动线程。 skip-slave-start
back-log back-log 是操作系统在监听队列中所能保持的连接数,队列保存了在 MySQL 连接管理器线程处理之前的连接.如果你有非常高的连接率并且出现 “connection refused” 报错,你就应该增加此处的值。 back-log = 50
max-connections MySQL 服务所允许的同时会话数的上限其中一个连接将被 SUPER 权限保留作为管理员登录.即便已经达到了连接数的上限. max-connections = 100
max-connect-errors 如果某个用户发起的连接error超过该数值,则该用户的下次连接将被阻塞,直到管理员执行flush hosts ; 命令 max-connect-errors = 100
open-files-limit mysql文件描述符限制 open-files-limit = 10240
connect-timeout 设置连接超时时间 connect-timeout = 30
wait-timeout 等待连接关闭时间 wait-timeout = 28800
interactive-timeout 关闭连接之前,允许interactive_timeout(取代了wait_timeout)秒的不活动时间。客户端的会话wait_timeout变量被设为会话interactive_timeout变量的值。 interactive-timeout = 28800
slave-net-timeout 从服务器也能够处理网络连接中断。但是,只有从服务器超过slave_net_timeout秒没有从主服务器收到数据才通知网络中断 slave-net-timeout = 600
log-bin 配置二进制日志文件的名称前缀。在未指定绝对路径的情形下,缺省位置保存在数据目录下。 log-bin = mysql-bin
log-bin-inde 指定binlog索引文件的路径与名称 log-bin-index = mysql-bin.index
binlog-format 设置binlog的记录格式,默认row格式 binlog-format=ROW
max-binlog-size 设置binglog最大的体积,达到这个体积binlog会轮转一次,默认为1G max_binlog_size = 1G
expire-logs-days binlog保留天数,默认保留30天 expire-logs-days = 30
log-error 配置服务器log文件路径 log-error = /home/mysql/mysql/log/mysql.err
log-output 参数log_output指定了慢查询输出的格式,默认为FILE,你可以将它设为TABLE,然后就可以查询mysql架构下的slow_log表了 log_output = FILE
slow-query-log 是否开启慢查询日志 slow-query-log = 1
long-query-time 设置慢查询时间 long-query-time = 1
slow-query-log-file 设置慢查询日志文件路径 slow-query-log-file = /home/mysql/mysql/log/slow.log
general-log 设置一般日志,开启这个配置会将所有达到服务器的SQL语句记录下来。默认关闭。 general_log = 1
general-log-file 设置一般日志的文件路径 general-log-file = /home/mysql/mysql/log/mysql.log
replicate-wild-ignore-table 主从复制设置忽略的数据库以及表,可以设置多个,通过,分割。也可以配置多个。 replicate-wild-ignore-table = mysql.%
skip-grant-tables 跳过授权表启动,默认关闭常用于忘记root密码操作。 skip-grant-tables

在MySQL8.0中,默认的密码认证插件更换为caching_sha2_password,一些老的客户端和程序并不支持这种认证插件,所以为了兼容性,我们可能需要将认证插件修改为mysql_native_password

在配置文件中指定default-authentication-plugin = mysql_native_password,以后创建的用户都将使用mysql_native_password来验证,但是之前的账户并不会更改验证插件。

举个例子: 当前配置文件没有配置default-authentication-plugin = mysql_native_password,我们创建一个用户名mr,看一下结果:

MySQL [(none)]> ALTER USER 'mr'@'%' IDENTIFIED  BY 'ch****';

MySQL [(none)]> select host,user,authentication_string,plugin from mysql.user;
+------------+------------------+---------------------------------------------+-----------------------+
| host       | user             | authentication_string                       | plugin                |
+------------+------------------+---------------------------------------------+-----------------------+
| %          | fxft             | *BE6B67787*******************************   | mysql_native_password |
| %          | root             | *821250F9A*******************************   | mysql_native_password |
| localhost  | mysql.infoschema | *THISISNOT*******************************   | mysql_native_password |
| localhost  | mysql.session    | *THISISNOT*******************************   | mysql_native_password |
| localhost  | mysql.sys        | *THISISNOT*******************************   | mysql_native_password |
| %          | mr               | $A$005$V?l*******************************   | caching_sha2_password |
+------------+------------------+---------------------------------------------+-----------------------+

通过上面的plugin可以看出用户使用了哪一种认证插件。

看表的结构,我们大胆猜测,每一个用户都可以指定不通的认证插件,事实上证明,确实是这样的。具体效果大家可以去实际操作体验。

那么回到default-authentication-plugin = mysql_native_password这个配置,这个配置只是设置了默认的认证插件,如果我们新建账户不需要默认的插件,可以WITH mysql_native_password通过手动指定插件,例如:

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password'; #指定mysql_native_password的认证插件
ALTER USER 'root'@'localhost' IDENTIFIED WITH caching_sha2_password BY 'password'; #指定caching_sha2_password的认证插件

其实,个人还是比较建议手动指定,因为有可能我们忘记了默认的认证插件是哪一个。

环境变量

MySQL安装好了,为了方便使用,我们将MySQL加入环境变量

[root@MySQL mysql]# echo '''export PATH=$PATH:/usr/local/mysql/bin''' >> /etc/profile
[root@MySQL mysql]# source /etc/profile

初始化数据库

装好了MySQL,也写好了配置文件,这个时候你并不能直接通过mysqld来启动MySQL。

因为还缺少系统必须的表,所以要通过命令先初始化MySQL,如下:

[root@MySQL mysql]# mysqld --initialize-insecure --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysqldata
2018-05-18T08:55:57.911931Z 0 [Warning] [MY-011070] [Server] 'Disabling symbolic links using --skip-symbolic-links (or equivalent) is the default. Consider not using this option as it' is deprecated and will be removed in a future release.
2018-05-18T08:55:57.912044Z 0 [System] [MY-013169] [Server] mysqld (mysqld 8.0.11) initializing of server in progress as process 29123
2018-05-18T08:56:00.537471Z 5 [Warning] [MY-010453] [Server] root@localhost is created with an empty password ! Please consider switching off the --initialize-insecure option.
2018-05-18T08:56:02.461135Z 0 [System] [MY-013170] [Server] mysqld (mysqld 8.0.11) initializing of server has completed

在初始化命令中--initialize-insecure告诉mysql不需要帮我生成root密码,这个时候mysql的root用户是没有密码的,你需要尽快修改它。

如果没有指定这个参数,MySQL会生成一个随机的密码,并且会告诉你密码存放在哪个文件中。


四、启动MySQL

初始化之后,现在你可以启动MySQL了,如果你当前用户是root,那么你需要通过指定mysql用户名来启动服务,就像这样mysqld --user=mysql,甚至你可以指定配置文件,如果你没有指定启动的配置文件,服务器会自动搜索目录,还记得在编译的时候指定了-DSYSCONFDIR吗?是的,MySQL会自动搜索这个文件夹。

如果,你使用mysqld --user=mysql启动MySQL的话,那么MySQL会再前台运行,显然这不是我们想要的,我们将MySQL启动让systemd来托管。

systemd 启动脚本

创建/usr/lib/systemd/system/mysqld.service文件,配置如下

[root@MySQL log]# cat > /usr/lib/systemd/system/mysqld.service <<EOF
> [Unit]
> Description=MySQL Server
> Documentation=man:mysqld(8)
> Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
> After=network.target
> After=syslog.target
> 
> [Install]
> WantedBy=multi-user.target
> 
> [Service]
> User=mysql
> Group=mysql
> Type=notify
> TimeoutSec=0
> PermissionsStartOnly=true
> ExecStart=/usr/local/mysql/bin/mysqld \$MYSQLD_OPTS
> LimitNOFILE = 10000
> Restart=always
> RestartPreventExitStatus=1
> Environment=MYSQLD_PARENT_PID=1
> PrivateTmp=false
> EOF

通过systemctl enable mysqld命令让MySQL自启动 通过systemctl start mysqld命令来启用MySQL自启动

自此,MySQL安装配置完成,现在已经可以正常使用了。

在启动过程中,可能会有报一些错误,但是大多都是权限的错误,如果报错,请查看日志文件,根据日志文件的提示需要相应的权限即可。