版权说明:本文系博主通过各种渠道学习整理发表或者全文转载自其他平台,作为学习笔记,不能保证所有知识点是完全正确以及表达无误,用于生产环境配置时请斟酌。如有错误或建议请联系。转载请注明出处,侵删联系:linuxops@foxmail.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_password 和caching_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安装配置完成,现在已经可以正常使用了。
在启动过程中,可能会有报一些错误,但是大多都是权限的错误,如果报错,请查看日志文件,根据日志文件的提示需要相应的权限即可。