根据安全性和保密性的要求,内网服务器是不能访问网络的,因此只能离线安装软件,安装MySQL的依赖包须要配置yum源,因为服务器架构的不一样,考虑到兼容性,可定制性,以及为了提升MySQL运行性能,编译安装MySQL是最合适的方法。php
MySQL是最流行的关系型数据库管理系统之一,使用简单,部署快速,功能全面,能够快速知足中小型公司的数据存储需求。html
服务器版本 | MySQL软件版本 | CPU架构 |
---|---|---|
CentOS Linux release 7.4.1708 (Core) | MySQL 5.7 | x86_64 |
因为内网没法访问网络,因此需先挂载centos7的ISO镜像,而后配置yum源安装mysql5.7编译所须要的依赖包node
建立ISO镜像存放目录并上传ISO镜像文件mysql
[root@node8 ~]# mkdir /mnt/yum-iso [root@node8 ~]# cd /mnt/ [root@node8 mnt]# cd yum-iso/ [root@node8 yum-iso]# mkdir /mnt/cdrom [root@node8 yum-iso]# pwd /mnt/yum-iso 使用xftp工具上传ISO镜像到/mnt/yum-iso目录
挂载ISO镜像到/mnt/cdrom目录linux
[root@node8 yum-iso]# mount -o loop /mnt/yum-iso/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom #挂载系统镜像 mount: /dev/loop0 is write-protected, mounting read-only [root@node8 yum-iso]# df -h #查看磁盘 Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 13G 4.3G 76% / devtmpfs 478M 0 478M 0% /dev tmpfs 489M 0 489M 0% /dev/shm tmpfs 489M 6.7M 482M 2% /run tmpfs 489M 0 489M 0% /sys/fs/cgroup /dev/sda1 1014M 125M 890M 13% /boot tmpfs 98M 0 98M 0% /run/user/0 /dev/loop0 4.3G 4.3G 0 100% /mnt/cdrom #显示这一行说明已经镜像已经挂载成功
配置yum源:c++
[root@node8 yum-iso]# cd /etc/yum.repos.d/ [root@node8 yum.repos.d]# mkdir yumbak [root@node8 yum.repos.d]# mv *.repo yumbak/ #备份原有配置文件 [root@node8 yum.repos.d]# vim iso.repo [root@node8 yum.repos.d]# cat iso.repo [centos7-iso] name=centos-iso baseurl=file:///mnt/cdrom #此处写镜像挂载目录 gpgcheck=0 enabled=1
清空yum缓存:sql
[root@node8 yum.repos.d]# yum clean all Loaded plugins: fastestmirror Cleaning repos: centos7-iso Cleaning up everything Maybe you want: rm -rf /var/cache/yum, to also free up space taken by orphaned data from disabled or removed repos Cleaning up list of fastest mirrors [root@node8 yum.repos.d]#
使用yum list检查是否设置成功!若是有输出就表示yum源配置成功docker
[root@node9 yum.repos.d]# yum list
设置开机自动挂载iso镜像文件,在/etc/fstab的最后一行添加配置,将iso文件永久挂载到系统中shell
[root@node9 yum.repos.d]# vim /etc/fstab [root@node9 yum.repos.d]# cat /etc/fstab # /etc/fstab # Created by anaconda on Fri Apr 26 17:36:34 2019 # Accessible filesystems, by reference, are maintained under '/dev/disk' # See man pages fstab(5), findfs(8), mount(8) and/or blkid(8) for more info /dev/mapper/centos-root / xfs defaults 0 0 UUID=c7de6c01-e93f-4907-b919-5989396f857b /boot xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /mnt/yum-iso/CentOS-7-x86_64-DVD-1708.iso /mnt/cdrom iso9660 loop 0 0 #这行是新增的,注意这里要写正确,否则服务器开不了机
再次查看磁盘,确认系统镜像是否挂载成功数据库
[root@node9 yum.repos.d]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/centos-root 17G 7.5G 9.5G 45% / devtmpfs 2.0G 0 2.0G 0% /dev tmpfs 2.0G 0 2.0G 0% /dev/shm tmpfs 2.0G 8.6M 2.0G 1% /run tmpfs 2.0G 0 2.0G 0% /sys/fs/cgroup /dev/sda1 1014M 125M 890M 13% /boot tmpfs 394M 0 394M 0% /run/user/0 /dev/loop0 4.3G 4.3G 0 100% /mnt/cdrom
安装mysql基本依赖包依赖包
[root@node9 ~]# yum install bison* ncurses* -y [root@node9 ~]# yum install -y bzip2 wget -y
升级gcc到7.3版本用于编译MySQL,编译安装gcc源码包安装gcc
[root@node9 yum.repos.d]# cd /home/ 上传gcc-7.3.0.tar.gz到/home目录 [root@node9 home]# rz -E #rz命令上传gcc源码包 rz waiting to receive. [root@node9 home]# ls gcc-7.3.0.tar.gz
解压gcc源码包
[root@node9 home]# tar -xvf gcc-7.3.0.tar.gz #tar命令解压gcc [root@node9 home]# pwd /home [root@node9 home]# ls gcc-7.3.0 gcc-7.3.0.tar.gz [root@node9 gcc-7.3.0]# cd gcc-7.3.0 [root@node9 gcc-7.3.0]# pwd /home/gcc-7.3.0
上传gmp-6.1.0.tar.bz2,mpfr-3.1.4.tar.bz2,mpc-1.0.3.tar.gz,isl-0.16.1.tar.bz2到/home/gcc-7.3.0目录下
[root@node9 gcc-7.3.0]# rz -E rz waiting to receive. [root@node9 gcc-7.3.0]# rz -E rz waiting to receive. [root@node9 gcc-7.3.0]# rz -E rz waiting to receive. [root@node9 gcc-7.3.0]# rz -E rz waiting to receive. [root@node9 gcc-7.3.0]# ls ABOUT-NLS COPYING3 isl-0.16.1.tar.bz2 libhsail-rt ltmain.sh mkinstalldirs ChangeLog COPYING3.LIB LAST_UPDATED libiberty lt~obsolete.m4 move-if-change ChangeLog.jit COPYING.LIB libada libitm lto-plugin mpc-1.0.3.tar.gz ChangeLog.tree-ssa COPYING.RUNTIME libatomic libmpx ltoptions.m4 mpfr-3.1.4.tar.bz2 compile depcomp libbacktrace libobjc ltsugar.m4 NEWS config fixincludes libcc1 liboffloadmic ltversion.m4 README config.guess gcc libcilkrts libquadmath MAINTAINERS symlink-tree config-ml.in gmp-6.1.0.tar.bz2 libcpp libsanitizer maintainer-scripts ylwrap config.rpath gnattools libdecnumber libssp Makefile.def zlib config.sub gotools libffi libstdc++-v3 Makefile.in configure include libgcc libtool-ldflags Makefile.tpl configure.ac INSTALL libgfortran libtool.m4 MD5SUMS contrib install-sh libgo libvtv missing COPYING intl libgomp ltgcc.m4 mkdep
在“gcc-7.3.0”目录下,检查gcc的依赖包是否已下载和安装,若是没有,会自动下载和安装。
[root@node9 gcc-7.3.0]# ./contrib/download_prerequisites gmp-6.1.0.tar.bz2: OK mpfr-3.1.4.tar.bz2: OK mpc-1.0.3.tar.gz: OK isl-0.16.1.tar.bz2: OK All prerequisites downloaded successfully.#若是输出为这样,因此因此依赖都已知足
使用configure命令检查gcc编译环境
[root@node9 gcc-7.3.0]# cd /home/gcc-7.3.0 [root@node9 gcc-7.3.0]# mkdir gcc-build-7.3.0 [root@node9 gcc-7.3.0]# cd gcc-build-7.3.0 [root@node9 gcc-build-7.3.0]# ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr #--prefix=/usr是把gcc指定安装在/usr目录下 ....... ....输出内容过多,只列出以下... checking where to find the target windmc... host tool checking whether to enable maintainer-specific portions of Makefiles... no configure: creating ./config.status config.status: creating Makefile [root@node9 gcc-build-7.3.0]# echo $? #输出结果为0则说明gcc编译环境知足条件 0
使用make -j 4编译gcc,4表明使用几个线程来执行程序,若是是16核服务器则可使用16
[root@node9 gcc-build-7.3.0]# make -j 4 [root@node9 gcc-build-7.3.0]# echo $? ##输出结果为0则说明编译成功 0
使用make install安装gcc
[root@node9 gcc-build-7.3.0]# make install [root@node9 gcc-build-7.3.0]# echo $? ##输出结果为0则说明安装成功 0
肯定“libstdc++.so”是否在“/usr/lib64”目录下
[root@node9 gcc-build-7.3.0]# cd /usr/lib64/ [root@node9 lib64]# ll | grep libstdc++.so lrwxrwxrwx 1 root root 19 Nov 5 12:34 libstdc++.so -> libstdc++.so.6.0.24 lrwxrwxrwx 1 root root 19 Nov 5 12:34 libstdc++.so.6 -> libstdc++.so.6.0.24 -rwxr-xr-x. 1 root root 991616 Mar 14 2019 libstdc++.so.6.0.19 -rwxr-xr-x 1 root root 11515840 Nov 5 12:34 libstdc++.so.6.0.24 -rw-r--r-- 1 root root 2385 Nov 5 12:34 libstdc++.so.6.0.24-gdb.py
肯定软链接是否存在
[root@node9 lib64]# ll |grep libstdc++.so.6.0.24 lrwxrwxrwx 1 root root 19 Nov 5 12:34 libstdc++.so -> libstdc++.so.6.0.24 lrwxrwxrwx 1 root root 19 Nov 5 12:34 libstdc++.so.6 -> libstdc++.so.6.0.24 -rwxr-xr-x 1 root root 11515840 Nov 5 12:34 libstdc++.so.6.0.24 -rw-r--r-- 1 root root 2385 Nov 5 12:34 libstdc++.so.6.0.24-gdb.py
查看gcc版本
[root@node9 lib64]# gcc -v #输出以下内容则说明gcc 7.3安装成功 Using built-in specs. COLLECT_GCC=gcc COLLECT_LTO_WRAPPER=/usr/libexec/gcc/x86_64-pc-linux-gnu/7.3.0/lto-wrapper Target: x86_64-pc-linux-gnu Configured with: ../configure --enable-checking=release --enable-language=c,c++ --disable-multilib --prefix=/usr Thread model: posix gcc version 7.3.0 (GCC)
上传mysql-boost-5.7.22.tar.gz到/usr/local/src/目录下
[root@node9 lib64]# cd /usr/local/src/ [root@node9 src]# pwd /usr/local/src [root@node9 src]# rz -E rz waiting to receive. [root@node9 src]# ls mysql-boost-5.7.28.tar.gz
解压mysql源码包
[root@node9 src]# tar -zxf mysql-boost-5.7.28.tar.gz [root@node9 src]# ls mysql-5.7.28 mysql-boost-5.7.28.tar.gz
下载mysql补丁文件,并放置到/usr/local/src/mysql-5.7.28路径下(这步其实能够省略)
补丁下载路径:https://bugs.mysql.com/file.php?id=28180&bug_id=94699
[root@node9 src]# cd mysql-5.7.28/ [root@node9 mysql-5.7.28]# pwd /usr/local/src/mysql-5.7.28 [root@node9 mysql-5.7.28]# rz -E rz waiting to receive. [root@node9 mysql-5.7.28]# ls 0001-Bug-94699-Mysql-deadlock-and-bugcheck-on-aarch64.patch [root@node9 mysql-5.7.28]# pwd /usr/local/src/mysql-5.7.28
打mysql补丁,若是没有patch命令则须要安装patch命令
[root@node9 mysql-5.7.28]# patch -p1 < 0001-Bug-94699-Mysql-deadlock-and-bugcheck-on-aarch64.patch -bash: patch: command not found #出现这个提示说明patch没有安装 #安装patch命令 [root@node9 mysql-5.7.28]# yum -y install patch ........................... .....输出太多只显示以下....... Installed: patch.x86_64 0:2.7.1-8.el7 Complete!
开始打补丁
#打补丁:所有回车便可 [root@node9 mysql-5.7.28]# patch -p1 < 0001-Bug-94699-Mysql-deadlock-and-bugcheck-on-aarch64.patch patching file storage/innobase/sync/sync0rw.cc Reversed (or previously applied) patch detected! Assume -R? [n] Apply anyway? [n] Skipping patch. 2 out of 2 hunks ignored -- saving rejects to file storage/innobase/sync/sync0rw.cc.rej
建立mysql的cmake脚本
[root@node9 mysql-5.7.28]# pwd /usr/local/src/mysql-5.7.28 [root@node9 mysql-5.7.28]# vim cmake.sh #因为mysql的编译参数较多,写到脚本里便于运行以及复用 [root@node9 mysql-5.7.28]# cat cmake.sh #CMAKE_INSTALL_PREFIX路径和WITH_BOOST路径按照您的真实路径填写 cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \ -DMYSQL_DATADIR=/data/data \ -DSYSCONFDIR=/etc \ -DWITH_INNOBASE_STORAGE_ENGINE=1 \ -DWITH_PARTITION_STORAGE_ENGINE=1 \ -DWITH_FEDERATED_STORAGE_ENGINE=1 \ -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ -DWITH_MYISAM_STORAGE_ENGINE=1 \ -DENABLED_LOCAL_INFILE=1 \ -DENABLE_DTRACE=0 \ -DDEFAULT_CHARSET=utf8mb4 \ -DDEFAULT_COLLATION=utf8mb4_general_ci \ -DWITH_EMBEDDED_SERVER=1 \ -DDOWNLOAD_BOOST=1 \ -DWITH_BOOST=/usr/local/src/mysql-5.7.28/boost/boost_1_59_0
给cmake.sh赋予可执行权限
[root@node9 mysql-5.7.28]# chmod +x cmake.sh
再次安装mysql依赖包
[root@node9 mysql-5.7.28]# yum -y install openssl openssl-devel expat-deve
执行脚本
[root@node9 mysql-5.7.28]# ./cmake.sh [root@node9 mysql-5.7.28]# echo $? #输出为0则说明脚本执行成功 0
编译mysql
[root@node9 mysql-5.7.28]# make -j 5 [root@node9 mysql-5.7.28]# echo $? #输出为0则说明MySQL编译成功 0
安装mysql
[root@node9 mysql-5.7.28]# make install [root@node9 mysql-5.7.28]# echo $? #输出为0则说明MySQL安装成功 0
删除系统残留的mysql用户和用户组,以避免形成干扰
[root@node9 mysql-5.7.28]# userdel -r mysql #删除用户 userdel: mysql mail spool (/var/spool/mail/mysql) not found userdel: mysql home directory (/home/mysql) not found [root@node9 mysql-5.7.28]# groupdel mysql #删除用户组 groupdel: group 'mysql' does not exist
建立mysql用户和用户组
[root@node9 mysql-5.7.28]# groupadd mysql #建立MySQL用户组 [root@node9 mysql-5.7.28]# useradd -g mysql mysql #建立MySQL用户
修改/usr/local/mysql权限
[root@node9 mysql-5.7.28]# chown -R mysql:mysql /usr/local/mysql
进入安装路径,建立data、log、run文件夹,分别用户保存数据,日志,进程ID
[root@node9 mysql-5.7.28]# cd /usr/local/mysql/ [root@node9 mysql]# mkdir -p /data/log /data/data /data/run
进行mysql初始化
[root@node9 mysql]# bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/data --user=mysql #basedir填MySQL安装目录,datadir填数据存在目录,user填MySQL运行用户 2019-11-05T06:33:23.155541Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details). 2019-11-05T06:33:23.247376Z 0 [ERROR] Could not open file '/var/log/mysqld.log' for error logging: Permission denied #出现这个错误,说明/var/log/mysqld.log权限不足 2019-11-05T06:33:23.247427Z 0 [ERROR] Aborting #赋予/var/log/mysqld.log的拥有者为mysql [root@node9 mysql]# chown -R mysql:mysql /var/log/mysqld.log #再次进行MySQL初始化 [root@node9 mysql]# bin/mysqld --initialize --basedir=/usr/local/mysql --datadir=/data/data --user=mysql [root@node9 mysql]# echo $? #此输出为0则说明MySQL初始化成功 0
建立mysql.log和mysql.pid文件,并赋予mysql用户及用户组权限
[root@node9 mysql]# touch /data/log/mysql.log [root@node9 mysql]# touch /data/run/mysql.pid [root@node9 mysql]# chown -R mysql:mysql /data
编辑mysql配置文件(配置文件最好和我保持一致)
[root@node9 mysql]# vim /etc/my.cnf [root@node9 mysql]# cat /etc/my.cnf [mysqld] basedir=/var/lib/mysql datadir=/data/data #数据存放目录 port=3306 #端口号 socket=/data/data/mysql.sock character-set-server=utf8 #字符集编码 symbolic-links=0 log-error=/data/log/mysql.log #日志存放目录 pid-file=/data/run/mysql.pid #MySQL进程ID存放目录 !includedir /etc/my.cnf.d
启动mysql
[root@node9 mysql]# pwd /usr/local/mysql [root@node9 mysql]# cp support-files/mysql.server /etc/init.d/mysql [root@node9 mysql]# chkconfig mysql on #配置MySQL开机自启动 [root@node9 mysql]# service mysql start #启动MySQL Starting MySQL SUCCESS! #若是出现此,则说明MySQL启动成功
添加mysql路径到当前用户的环境变量里,这样能够直接在shell中使用MySQL命令
[root@node9 mysql]# vim ~/.bash_profile [root@node9 mysql]# cat ~/.bash_profile # .bash_profile # Get the aliases and functions if [ -f ~/.bashrc ]; then . ~/.bashrc fi # User specific environment and startup programs PATH=$PATH:$HOME/bin #export PATH export PATH=/usr/local/mysql/bin:$PATH #新增
使环境变量生效并重启MySQL
[root@node9 mysql]# source ~/.bash_profile [root@node9 mysql]# service mysql restart ERROR! MySQL server PID file could not be found! Starting MySQL. SUCCESS! [root@node9 mysql]# ps -ef | grep mysql #查看MySQL进程是否存在 root 121678 1 0 14:55 pts/0 00:00:00 /bin/sh /var/lib/mysql/bin/mysqld_safe --datadir=/data/data --pid-file=/data/run/mysql.pid mysql 121933 121678 1 14:55 pts/0 00:00:00 /var/lib/mysql/bin/mysqld --basedir=/var/lib/mysql --datadir=/data/data --plugin-dir=/var/lib/mysql/lib/plugin --user=mysql --log-error=/data/log/mysql.log --pid-file=/data/run/mysql.pid --socket=/data/data/mysql.sock --port=3306 root 121963 1325 0 14:55 pts/0 00:00:00 grep --color=auto mysql
进入mysql数据库
[root@node9 mysql]# mysql -uroot -p Enter password: ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2) #出现这种报错说明sock出错,方法为创建套接字软连接,接入MySQL环境 [root@node9 mysql]# ln -s /data/data/mysql.sock /tmp/mysql.sock 首先查询mysql默认密码: [root@node9 ~]# grep 'temporary password' /var/log/mysqld.log 2019-11-05T06:35:28.565529Z 1 [Note] A temporary password is generated for root@localhost: T<&loC3=%t+Q #T<&loC3=%t+Q就是mysql初始密码 #进入mysql数据库 [root@node9 mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 3 Server version: 5.7.26-log Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> SET PASSWORD = PASSWORD('123456');#修改mysql的root用户密码为123456 Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> UPDATE mysql.user SET authentication_string =PASSWORD('123456') WHERE User='mysql';#修改mysql的mysql用户密码为123456 Query OK, 0 rows affected, 1 warning (0.00 sec) Rows matched: 0 Changed: 0 Warnings: 1 mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@localhost IDENTIFIED BY '123456' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO mysql@"%" IDENTIFIED BY '123456' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO root@localhost IDENTIFIED BY '123456' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.00 sec) mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY '123456' WITH GRANT OPTION; Query OK, 0 rows affected, 1 warning (0.01 sec) mysql> FLUSH PRIVILEGES ; #刷新mysql权限 Query OK, 0 rows affected (0.00 sec) mysql> exit #退出MySQL Bye
再次进入mysql数据库,密码为修改后的密码123456
[root@node9 mysql]# mysql -u root -p Enter password: Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 4 Server version: 5.7.26-log Source distribution Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show databases; #展现MySQL数据库 +--------------------+ | Database | +--------------------+ | information_schema | | mysql | | performance_schema | | sys | +--------------------+ 4 rows in set (0.00 sec)
自此,mysql5.7源码编译安装完成。
[root@node9 ~]# mysql_secure_installation #此命令用于对MySQL进行安全设置 Securing the MySQL server deployment. Enter password for user root: #键入root密码 VALIDATE PASSWORD PLUGIN can be used to test passwords and improve security. It checks the strength of password and allows the users to set only those passwords which are secure enough. Would you like to setup VALIDATE PASSWORD plugin? Press y|Y for Yes, any other key for No: n #若是要安全MySQL密码强度插件,则y,安装以后简单的密码是设置不成功的 Using existing password for root. Change the password for root ? ((Press y|Y for Yes, any other key for No) : n #是否更改root密码,修改则y ... skipping. By default, a MySQL installation has an anonymous user, allowing anyone to log into MySQL without having to have a user account created for them. This is intended only for testing, and to make the installation go a bit smoother. You should remove them before moving into a production environment. Remove anonymous users? (Press y|Y for Yes, any other key for No) : y #是否移除匿名用户,建议移除 Success. Normally, root should only be allowed to connect from 'localhost'. This ensures that someone cannot guess at the root password from the network. Disallow root login remotely? (Press y|Y for Yes, any other key for No) : y #是否禁止root用户远程登陆,建议禁止,输入y Success. By default, MySQL comes with a database named 'test' that anyone can access. This is also intended only for testing, and should be removed before moving into a production environment. Remove test database and access to it? (Press y|Y for Yes, any other key for No) : y #是否移除test数据库,按我的需求选择便可 - Dropping test database... Success. - Removing privileges on test database... Success. Reloading the privilege tables will ensure that all changes made so far will take effect immediately. Reload privilege tables now? (Press y|Y for Yes, any other key for No) : y #输入y,当即刷新权限表,使配置生效 Success. All done!
MySQL默认连续8小时内没有访问数据库的操做,就会断开数据库链接,mysql数据库拒绝访问,在某些场景下,8小时是不够的,须要把MySQL超时时间调大,此时就须要调节MySQL的wait_timeout和interactive_timeout参数
mysql> show variables like '%timeout%';#用于查看MySQL时间相关的参数
修改MySQL配置文件,使wait_timeout和interactive_timeout参数变为31536000
[root@node9 mysql]# vim /etc/my.cnf [root@node9 mysql]# cat /etc/my.cnf [mysqld] basedir=/var/lib/mysql datadir=/data/data #数据存放目录 port=3306 #端口号 socket=/data/data/mysql.sock character-set-server=utf8 #字符集编码 symbolic-links=0 log-error=/data/log/mysql.log #日志存放目录 pid-file=/data/run/mysql.pid #MySQL进程ID存放目录 wait_timeout=31536000 #此为新增,配置MySQL超时时间,默认8小时,针对非交互式场景(jdbc,pymysql相似) interactive_timeout=31536000 #此为新增,配置MySQL超时时间, 默认8小时,针对交互式场景(手动执行,mysqldump) !includedir /etc/my.cnf.d
MySQL配置文件修改后,重启MySQL使配置文件生效
[root@node9 ~]# service mysql restart Shutting down MySQL. SUCCESS! Starting MySQL. SUCCESS!
进入MySQL,查看MySQL超时时间是否修改为功
[root@node9 ~]# mysql -uroot -p123456 mysql: [Warning] Using a password on the command line interface can be insecure. Welcome to the MySQL monitor. Commands end with ; or \g. Your MySQL connection id is 2 Server version: 5.7.26-log Source distribution Copyright (c) 2000, 2019, Oracle and/or its affiliates. All rights reserved. Oracle is a registered trademark of Oracle Corporation and/or its affiliates. Other names may be trademarks of their respective owners. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. mysql> show variables like '%timeout%'; +-----------------------------+----------+ | Variable_name | Value | +-----------------------------+----------+ | connect_timeout | 10 | | delayed_insert_timeout | 300 | | have_statement_timeout | YES | | innodb_flush_log_at_timeout | 1 | | innodb_lock_wait_timeout | 50 | | innodb_rollback_on_timeout | OFF | | interactive_timeout | 31536000 | #interactive_timeout已经变了 | lock_wait_timeout | 31536000 | | net_read_timeout | 30 | | net_write_timeout | 60 | | rpl_stop_slave_timeout | 31536000 | | slave_net_timeout | 60 | | wait_timeout | 31536000 | #wait_timeout已经变了 +-----------------------------+----------+ 13 rows in set (0.01 sec)
[root@node9 mysql]# vim /etc/my.cnf [root@node9 mysql]# cat /etc/my.cnf [mysqld] symbolic-links=0 log-error=/data/log/mysql.log #日志存放目录 wait_timeout=31536000 #此为新增,配置MySQL超时时间,默认8小时,针对非交互式场景(jdbc,pymysql相似) interactive_timeout=31536000 #此为新增,配置MySQL超时时间, 默认8小时,针对交互式场景(手动执行,mysqldump) !includedir /etc/my.cnf.d [client] #客户端设置,即客户端默认的链接参数 port = 3306 #默认链接端口 socket=/data/data/mysql.sock #用于本地链接的socket套接字 default-character-set = utf8mb4 #字符编码编码,utf8mb4编码是utf8编码的超集,兼容utf8,而且能存储4字节的表情字符。采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 [mysqld] #服务端基本设置 port = 3306 #MySQL监听端口 socket = /data/mysqldata/3307/mysql.sock #为MySQL客户端程序和服务器之间的本地通信指定一个套接字文件 pid-file = /data/run/mysql.pid #pid文件所在目录 basedir = /var/lib/mysql #使用该目录做为根目录(安装目录) datadir = /data/data #数据文件存放的目录 tmpdir = /data/mysqldata/3307/tmp #MySQL存放临时文件的目录 character_set_server = utf8mb4 #服务端默认编码(数据库级别) collation_server = utf8mb4_bin #服务端默认的比对规则,排序规则 user = mysql #MySQL启动用户 log_bin_trust_function_creators = 1 #This variable applies when binary logging is enabled. It controls whether stored function creators can be trusted not to create stored functions that will cause #unsafe events to be written to the binary log. If set to 0 (the default), users are not permitted to create or alter stored functions unless they have the SUPER #privilege in addition to the CREATE ROUTINE or ALTER ROUTINE privilege. 开启了binlog后,必须设置这个值为1.主要是考虑binlog安全 performance_schema = 0 #性能优化的引擎,默认关闭 secure_auth = 1 #secure_auth 为了防止低版本的MySQL客户端(<4.1)使用旧的密码认证方式访问高版本的服务器。MySQL 5.6.7开始secure_auth 默认为启用值1 #ft_min_word_len = 1 #开启全文索引 #myisam_recover #自动修复MySQL的myisam表 explicit_defaults_for_timestamp #明确时间戳默认null方式 event_scheduler #计划任务(事件调度器) skip-external-locking #跳过外部锁定;External-locking用于多进程条件下为MyISAM数据表进行锁定 skip-name-resolve #跳过客户端域名解析;当新的客户链接mysqld时,mysqld建立一个新的线程来处理请求。该线程先检查是否主机名在主机名缓存中。若是不在,线程试图解析主机名。 #使用这一选项以消除MySQL进行DNS解析的时间。但须要注意,若是开启该选项,则全部远程主机链接受权都要使用IP地址方式,不然MySQL将没法正常处理链接请求! #bind-address = 127.0.0.1 #MySQL绑定IP,容许哪台服务器登陆,则在后面添加IP便可,多个IP空格隔开 skip-slave-start #为了安全起见,复制环境的数据库仍是设置--skip-slave-start参数,防止复制随着mysql启动而自动启动 slave_net_timeout = 30 #The number of seconds to wait for more data from a master/slave connection before aborting the read. MySQL主从复制的时候, #当Master和Slave之间的网络中断,可是Master和Slave没法察觉的状况下(好比防火墙或者路由问题)。 #Slave会等待slave_net_timeout设置的秒数后,才能认为网络出现故障,而后才会重连而且追赶这段时间主库的数据。 #1.用这三个参数来判断主从是否延迟是不许确的Slave_IO_Running,Slave_SQL_Running,Seconds_Behind_Master.仍是用pt-heartbeat吧。 #2.slave_net_timeout不要用默认值,设置一个你能接受的延时时间。 local-infile = 0 #设定是否支持命令load data local infile。若是指定local关键词,则代表支持从客户主机读文件 back_log = 1024 #指定MySQL可能的链接数量。当MySQL主线程在很短的时间内获得很是多的链接请求,该参数就起做用,以后主线程花些时间(尽管很短)检查链接而且启动一个新线程。 #back_log参数的值指出在MySQL暂时中止响应新请求以前的短期内多少个请求能够被存在堆栈中。 #sql_mode = 'PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE,NO_KEY_OPTIONS,NO_TABLE_OPTIONS,NO_FIELD_OPTIONS,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION' sql_mode = NO_ENGINE_SUBSTITUTION,NO_AUTO_CREATE_USER #sql_mode,定义了mysql应该支持的sql语法,数据校验等! NO_AUTO_CREATE_USER:禁止GRANT建立密码为空的用户。 #NO_ENGINE_SUBSTITUTION 若是须要的存储引擎被禁用或未编译,能够防止自动替换存储引擎 key_buffer_size = 32M #索引块的缓冲区大小,对MyISAM表性能影响最大的一个参数.决定索引处理的速度,尤为是索引读的速度。默认值是16M,经过检查状态值Key_read_requests #和Key_reads,能够知道key_buffer_size设置是否合理 max_allowed_packet = 512M #一个查询语句包的最大尺寸。消息缓冲区被初始化为net_buffer_length字节,可是可在须要时增长到max_allowed_packet个字节。 #该值过小则会在处理大包时产生错误。若是使用大的BLOB列,必须增长该值。 #这个值来限制server接受的数据包大小。有时候大的插入和更新会受max_allowed_packet 参数限制,致使写入或者更新失败。 thread_stack = 256K #线程缓存;主要用来存放每个线程自身的标识信息,如线程id,线程运行时基本信息等等,咱们能够经过 thread_stack 参数来设置为每个线程栈分配多大的内存。 sort_buffer_size = 16M #是MySQL执行排序使用的缓冲大小。若是想要增长ORDER BY的速度,首先看是否可让MySQL使用索引而不是额外的排序阶段。 #若是不能,能够尝试增长sort_buffer_size变量的大小。 read_buffer_size = 16M #是MySQL读入缓冲区大小。对表进行顺序扫描的请求将分配一个读入缓冲区,MySQL会为它分配一段内存缓冲区。read_buffer_size变量控制这一缓冲区的大小。 #若是对表的顺序扫描请求很是频繁,而且你认为频繁扫描进行得太慢,能够经过增长该变量值以及内存缓冲区大小提升其性能。 join_buffer_size = 16M #应用程序常常会出现一些两表(或多表)Join的操做需求,MySQL在完成某些 Join 需求的时候(all/index join),为了减小参与Join的“被驱动表”的 #读取次数以提升性能,须要使用到 Join Buffer 来协助完成 Join操做。当 Join Buffer 过小,MySQL 不会将该 Buffer 存入磁盘文件, #而是先将Join Buffer中的结果集与须要 Join 的表进行 Join 操做, #而后清空 Join Buffer 中的数据,继续将剩余的结果集写入此 Buffer 中,如此往复。这势必会形成被驱动表须要被屡次读取,成倍增长 IO 访问,下降效率。 read_rnd_buffer_size = 32M #是MySQL的随机读缓冲区大小。当按任意顺序读取行时(例如,按照排序顺序),将分配一个随机读缓存区。进行排序查询时,MySQL会首先扫描一遍该缓冲,以免磁盘搜索, #提升查询速度,若是须要排序大量数据,可适当调高该值。但MySQL会为每一个客户链接发放该缓冲空间,因此应尽可能适当设置该值,以免内存开销过大。 net_buffer_length = 16K #通讯缓冲区在查询期间被重置到该大小。一般不要改变该参数值,可是若是内存不足,能够将它设置为查询指望的大小。 #(即,客户发出的SQL语句指望的长度。若是语句超过这个长度,缓冲区自动地被扩大,直到max_allowed_packet个字节。) myisam_sort_buffer_size = 128M #当对MyISAM表执行repair table或建立索引时,用以缓存排序索引;设置过小时可能会遇到” myisam_sort_buffer_size is too small” bulk_insert_buffer_size = 32M #默认8M,当对MyISAM非空表执行insert … select/ insert … values(…),(…)或者load data infile时,使用树状cache缓存数据,每一个thread分配一个; #注:当对MyISAM表load 大文件时,调大bulk_insert_buffer_size/myisam_sort_buffer_size/key_buffer_size会极大提高速度 thread_cache_size = 384 #thread_cahe_size线程池,线程缓存。用来缓存空闲的线程,以致于不被销毁,若是线程缓存在的空闲线程,须要从新创建新链接, #则会优先调用线程池中的缓存,很快就能响应链接请求。每创建一个链接,都须要一个线程与之匹配。 query_cache_size = 0 #工做原理: 一个SELECT查询在DB中工做后,DB会把该语句缓存下来,当一样的一个SQL再次来到DB里调用时,DB在该表没发生变化的状况下把结果从缓存中返回给Client。 #在数据库写入量或是更新量也比较大的系统,该参数不适合分配过大。并且在高并发,写入量大的系统,建系把该功能禁掉。 query_cache_type = 0 #决定是否缓存查询结果。这个变量有三个取值:0,1,2,分别表明了off、on、demand。 tmp_table_size = 1024M #它规定了内部内存临时表的最大值,每一个线程都要分配。(实际起限制做用的是tmp_table_size和max_heap_table_size的最小值。) #若是内存临时表超出了限制,MySQL就会自动地把它转化为基于磁盘的MyISAM表,存储在指定的tmpdir目录下 max_heap_table_size = 512M #独立的内存表所容许的最大容量.# 此选项为了防止意外建立一个超大的内存表致使永尽全部的内存资源. open_files_limit = 10240 #mysql打开最大文件数 max_connections = 2000 #MySQL不管如何都会保留一个用于管理员(SUPER)登录的链接,用于管理员链接数据库进行维护操做,即便当前链接数已经达到了max_connections。 #所以MySQL的实际最大可链接数为max_connections+1; #这个参数实际起做用的最大值(实际最大可链接数)为16384,即该参数最大值不能超过16384,即便超过也以16384为准; #增长max_connections参数的值,不会占用太多系统资源。系统资源(CPU、内存)的占用主要取决于查询的密度、效率等; #该参数设置太小的最明显特征是出现”Too many connections”错误; max-user-connections = 0 #用来限制用户资源的,0不限制;对整个服务器的用户限制 max_connect_errors = 100000 #max_connect_errors是一个MySQL中与安全有关的计数器值,它负责阻止过多尝试失败的客户端以防止暴力破解密码的状况。max_connect_errors的值与性能并没有太大关系。 #当此值设置为10时,意味着若是某一客户端尝试链接此MySQL服务器,可是失败(如密码错误等等)10次,则MySQL会无条件强制阻止此客户端链接。 table_open_cache = 5120 #表描述符缓存大小,可减小文件打开/关闭次数; interactive_timeout = 86400 #interactive_time -- 指的是mysql在关闭一个交互的链接以前所要等待的秒数(交互链接如mysql gui tool中的链接 wait_timeout = 86400 #wait_timeout -- 指的是MySQL在关闭一个非交互的链接以前所要等待的秒数 binlog_cache_size = 16M #二进制日志缓冲大小 #咱们知道InnoDB存储引擎是支持事务的,实现事务须要依赖于日志技术,为了性能,日志编码采用二进制格式。那么,咱们如何记日志呢?有日志的时候,就直接写磁盘? #但是磁盘的效率是很低的,若是你用过Nginx,,通常Nginx输出access log都是要缓冲输出的。所以,记录二进制日志的时候,咱们是否也须要考虑Cache呢? #答案是确定的,可是Cache不是直接持久化,因而面临安全性的问题——由于系统宕机时,Cache中可能有残余的数据没来得及写入磁盘。所以,Cache要权衡,要恰到好处: #既减小磁盘I/O,知足性能要求;又保证Cache无残留,及时持久化,知足安全要求。 slow_query_log = 1 #开启慢查询 long_query_time = 1 #超过的时间为1s;MySQL可以记录执行时间超过参数 long_query_time 设置值的SQL语句,默认是不记录的。 log-slow-admin-statements log-queries-not-using-indexes #记录管理语句和没有使用index的查询记录 # *** Replication related settings *** binlog_format = ROW #在复制方面的改进就是引进了新的复制技术:基于行的复制。简言之,这种新技术就是关注表中发生变化的记录,而非之前的照抄 binlog 模式。 #从 MySQL 5.1.12 开始,能够用如下三种模式来实现:基于SQL语句的复制(statement-based replication, SBR),基于行的复制(row-based replication, RBR), 混合模式复制(mixed-based replication, MBR)。相应地,binlog的格式也有三种:STATEMENT,ROW,MIXED。MBR 模式中,SBR 模式是默认的。 #max_binlog_cache_size = 102400 # 为每一个session 最大可分配的内存,在事务过程当中用来存储二进制日志的缓存。 log-bin = /data/mysqldata/3307/binlog/mysql-bin #开启二进制日志功能,binlog数据位置 log-bin-index = /data/mysqldata/3307/binlog/mysql-bin.index relay-log = /data/mysqldata/3307/relay/mysql-relay-bin #relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件, #而后SQL线程会读取relay-log日志的内容并应用到从服务器 relay-log-index = /data/mysqldata/3307/relay/mysql-relay-bin.index #binlog传到备机被写道relaylog里,备机的slave sql线程从relaylog里读取而后应用到本地。 server_id = 100 #服务端ID,用来高可用时作区分 log_slave_updates = 1 #log_slave_updates是将从服务器从主服务器收到的更新记入到从服务器本身的二进制日志文件中。 expire-logs-days = 15 #二进制日志自动删除的天数。默认值为0,表示“没有自动删除”。启动时和二进制日志循环时可能删除。 max_binlog_size = 512M #若是二进制日志写入的内容超出给定值,日志就会发生滚动。你不能将该变量设置为大于1GB或小于4096字节。 默认值是1GB。 replicate-wild-ignore-table = mysql.% #replicate-wild-ignore-table参数能同步全部跨数据库的更新,好比replicate-do-db或者replicate-ignore-db不会同步相似 #replicate-wild-do-table = db_name.% #设定须要复制的Table #slave-skip-errors = 1062,1053,1146 #复制时跳过一些错误;不要胡乱使用这些跳过错误的参数,除非你很是肯定你在作什么。当你使用这些参数时候,MYSQL会忽略那些错误, #这样会致使你的主从服务器数据不一致。 auto_increment_offset = 1 auto_increment_increment = 2 #这两个参数通常用在主主同步中,用来错开自增值, 防止键值冲突 relay_log_info_repository = TABLE #将中继日志的信息写入表:mysql.slave_realy_log_info master_info_repository = TABLE #将master的链接信息写入表:mysql.salve_master_info relay_log_recovery = on #中继日志自我修复;当slave从库宕机后,假如relay-log损坏了,致使一部分中继日志没有处理,则自动放弃全部未执行的relay-log, #而且从新从master上获取日志,这样就保证了relay-log的完整性 # *** innodb setting *** innodb_buffer_pool_size = 4G #InnoDB 用来高速缓冲数据和索引内存缓冲大小。 更大的设置可使访问数据时减小磁盘 I/O。 innodb_data_file_path = ibdata1:1G:autoextend #单独指定数据文件的路径与大小 innodb_flush_log_at_trx_commit = 0 #每次commit 日志缓存中的数据刷到磁盘中。一般设置为 1,意味着在事务提交前日志已被写入磁盘, 事务能够运行更长以及服务崩溃后的修复能力。 #若是你愿意减弱这个安全,或你运行的是比较小的事务处理,能够将它设置为 0 ,以减小写日志文件的磁盘 I/O。这个选项默认设置为 0。 #sync_binlog = 1000 #sync_binlog=n,当每进行n次事务提交以后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。 innodb_read_io_threads = 8 innodb_write_io_threads = 8 #对于多核的CPU机器,能够修改innodb_read_io_threads和innodb_write_io_threads来增长IO线程,来充分利用多核的性能 innodb_file_format = Barracuda #Innodb Plugin引擎开始引入多种格式的行存储机制,目前支持:Antelope、Barracuda两种。其中Barracuda兼容Antelope格式。 innodb_open_files = 65536 #限制Innodb能打开的表的数量 innodb_purge_threads = 1 #开始碎片回收线程。这个应该能让碎片回收得更及时并且不影响其余线程的操做 innodb_support_xa = FALSE #分布式事务 innodb_log_buffer_size = 256M #InnoDB 将日志写入日志磁盘文件前的缓冲大小。理想值为 1M 至 8M。大的日志缓冲容许事务运行时不须要将日志保存入磁盘而只到事务被提交(commit)。 #所以,若是有大的事务处理,设置大的日志缓冲能够减小磁盘I/O。 innodb_log_file_size = 1G #日志组中的每一个日志文件的大小(单位 MB)。若是 n 是日志组中日志文件的数目,那么理想的数值为 1M 至下面设置的缓冲池(buffer pool)大小的 1/n。较大的值, #能够减小刷新缓冲池的次数,从而减小磁盘 I/O。可是大的日志文件意味着在崩溃时须要更长的时间来恢复数据。 innodb_log_files_in_group = 3 #指定有三个日志组 #innodb_lock_wait_timeout = 120 #在回滚(rooled back)以前,InnoDB 事务将等待超时的时间(单位 秒) innodb_max_dirty_pages_pct = 75 #innodb_max_dirty_pages_pct做用:控制Innodb的脏页在缓冲中在那个百分比之下,值在范围1-100,默认为90.这个参数的另外一个用处: #当Innodb的内存分配过大,导致swap占用严重时,能够适当的减少调整这个值,使达到swap空间释放出来。建义:这个值最大在90%,最小在15%。 #太大,缓存中每次更新须要致换数据页太多,过小,放的数据页过小,更新操做太慢。 innodb_buffer_pool_instances = 4 #innodb_buffer_pool_size 一致 能够开启多个内存缓冲池,把须要缓冲的数据hash到不一样的缓冲池中,这样能够并行的内存读写。 innodb_io_capacity = 500 #这个参数据控制Innodb checkpoint时的IO能力 innodb_file_per_table = 1 #做用:使每一个Innodb的表,有自已独立的表空间。如删除文件后能够回收那部分空间。 #分配原则:只有使用不使用。但DB还须要有一个公共的表空间。 innodb_change_buffering = inserts #当更新/插入的非汇集索引的数据所对应的页不在内存中时(对非汇集索引的更新操做一般会带来随机IO),会将其放到一个insert buffer中, #当随后页面被读到内存中时,会将这些变化的记录merge到页中。当服务器比较空闲时,后台线程也会作merge操做 innodb_adaptive_flushing = 1 #该值影响每秒刷新脏页的操做,开启此配置后,刷新脏页会经过判断产生重作日志的速度来判断最合适的刷新脏页的数量; transaction-isolation = READ-COMMITTED #数据库事务隔离级别 ,读取提交内容 innodb_flush_method = O_DIRECT #innodb_flush_method这个参数控制着innodb数据文件及redo log的打开、刷写模式 #InnoDB使用O_DIRECT模式打开数据文件,用fsync()函数去更新日志和数据文件。 #innodb_use_sys_malloc = 1 #默认设置值为1.设置为0:表示Innodb使用自带的内存分配程序;设置为1:表示InnoDB使用操做系统的内存分配程序。 [mysqldump] quick #它强制 mysqldump 从服务器查询取得记录直接输出而不是取得全部记录后将它们缓存到内存中 max_allowed_packet = 512M #限制server接受的数据包大小;指代mysql服务器端和客户端在一次传送数据包的过程中数据包的大小 net_buffer_length = 16384 #TCP/IP和套接字通讯缓冲区大小,建立长度达net_buffer_length的行 [mysql] auto-rehash #auto-rehash是自动补全的意思 [isamchk] #isamchk数据检测恢复工具 key_buffer = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [myisamchk] #使用myisamchk实用程序来得到有关你的数据库桌表的信息、检查和修复他们或优化他们 key_buffer = 256M sort_buffer_size = 256M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout #mysqlhotcopy使用lock tables、flush tables和cp或scp来快速备份数据库.它是备份数据库或单个表最快的途径,彻底属于物理备份,但只能用于备份MyISAM存储引擎和运行在数据库目录所在的机器上. #与mysqldump备份不一样,mysqldump属于逻辑备份,备份时是执行的sql语句.使用mysqlhotcopy命令前须要要安装相应的软件依赖包.
[mysqld] pid-file = /var/run/mysqld/mysqld.pid socket = /var/run/mysqld/mysqld.sock datadir = /var/lib/mysql #log-error = /var/log/mysql/error.log # By default we only accept connections from localhost #bind-address = 127.0.0.1 # Disabling symbolic-links is recommended to prevent assorted security risks #支持符号连接,就是能够经过软链接的方式,管理其余目录的数据库,最好不要开启,当一个磁盘或分区空间不够时,能够开启该参数将数据存储到其余的磁盘或分区。 #https://blog.csdn.net/moxiaomomo/article/details/17092871 symbolic-links=0 ########basic settings######## server-id = 11 port = 3306 user = mysql #设置autocommit=0,则用户将一直处于某个事务中,直到执行一条commit提交或rollback语句才会结束当前事务从新开始一个新的事务。set autocommit=0的好处是在频繁开启事务的场景下,减小一次begin的交互。 autocommit = 1 #utf8mb4编码是utf8编码的超集,兼容utf8,而且能存储4字节的表情字符。 #采用utf8mb4编码的好处是:存储与获取数据的时候,不用再考虑表情字符的编码与解码问题。 character_set_server=utf8mb4 skip_name_resolve = 1 max_connections = 800 # 对于同一主机,若是有超出该参数值个数的中断错误链接,则该主机将被禁止链接。如需对该主机进行解禁,执行:FLUSH HOST。 max_connect_errors = 1000 #数据库隔离级别 transaction_isolation = READ-COMMITTED #MySQL在完成某些join(链接)需求的时候,为了减小参与join的“被驱动表”的读取次数以提升性能,须要使用到join buffer来协助完成join操做当join buffer 过小,MySQL不会将该buffer存入磁盘文件而是先将join buffer中的结果与需求join的表进行操做,而后清空join buffer中的数据,继续将剩余的结果集写入次buffer中 join_buffer_size = 128M tmp_table_size = 64M tmpdir = /tmp #该值设置太小将致使单个记录超过限制后写入数据库失败,且后续记录写入也将失败 max_allowed_packet = 64M #mysql在关闭一个交互的链接以前所要等待的秒数 interactive_timeout = 1200 #mysql在关闭一个非交互的链接以前所要等待的秒数 wait_timeout = 600 #MySQL读入缓冲区的大小 read_buffer_size = 16M #MySQL的随机读缓冲区大小 read_rnd_buffer_size = 8M #MySQL的顺序读缓冲区大小 sort_buffer_size = 8M ########log settings######## log_error = /var/log/docker_log/mysql/error.log #开启慢查询日志 slow_query_log = 1 #超出次设定值的SQL即被记录到慢查询日志 long_query_time = 6 slow_query_log_file = /var/log/docker_log/mysql/slow.log #表示记录下没有使用索引的查询 log_queries_not_using_indexes = 1 #记录管理语句 log_slow_admin_statements = 1 #开启复制从库复制的慢查询的日志 log_slow_slave_statements = 1 #设置每分钟增加的没有使用索引查询的日志数量 log_throttle_queries_not_using_indexes = 10 expire_logs_days = 90 min_examined_row_limit = 100 ########replication settings######## #将master.info和relay.info保存在表中 master_info_repository = TABLE relay_log_info_repository = TABLE log_bin = bin.log #当每进行n次事务提交以后,MySQL将进行一次fsync之类的磁盘同步指令来将binlog_cache中的数据强制写入磁盘。设置为零是让系统自行决定 sync_binlog = 5 #开启全局事务ID,GTID可以保证让一个从服务器到其余的从服务器那里实现数据复制并且可以实现数据整合的 gtid_mode = on #开启gtid,必须主从全开 enforce_gtid_consistency = 1 #从服务器的更新是否写入二进制日志 log_slave_updates = 1 #三种模式 STATEMENT(有可能主从数据不一致,日质量小)、ROW(产生大量二进制日志)、MIXED binlog_format = mixed #relay-log日志记录的是从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,而后SQL线程会读取relay-log日志的内容并应用到从服务器 relay_log = /var/log/docker_log/mysql/relay.log relay_log_recovery = 1 #开启简单gtid,开启此项会提高mysql执行恢复的性能 binlog_gtid_simple_recovery = 1 slave_skip_errors = ddl_exist_errors ########innodb settings######## #这个参数在一开始初始化时就要加入my.cnf里,若是已经建立了表,再修改,启动MySQL会报错。最好为8K #innodb_page_size = 16K innodb_page_size = 8K #数据缓冲区buffer pool大小,建议使用物理内存的 75% innodb_buffer_pool_size = 2G #当buffer_pool的值较大的时候为1,较小的设置为8 innodb_buffer_pool_instances = 8 #运行时load缓冲池,快速预热缓冲池,将buffer pool的内容(文件页的索引)dump到文件中,而后快速load到buffer pool中。避免了数据库的预热过程,提升了应用访问的性能 innodb_buffer_pool_load_at_startup = 1 #运行时dump缓冲池 innodb_buffer_pool_dump_at_shutdown = 1 #在innodb中处理用户查询后,其结果在内存空间的缓冲池已经发生变化,可是还未记录到磁盘。这种页面称为脏页,将脏页记录到磁盘的过程称为刷脏 innodb_lru_scan_depth = 2000 innodb_io_capacity = 4000 innodb_io_capacity_max = 8000 #事务等待获取资源等待的最长时间,超过这个时间还未分配到资源则会返回应用失败,默认50s innodb_lock_wait_timeout = 30 #日志组所在的路径,默认为data的home目录; innodb_log_group_home_dir = /data/mysql/ #innodb_undo_directory = /data/mysql/undolog/ #这个参数控制着innodb数据文件及redo log的打开、刷写模式,https://blog.csdn.net/gua___gua/article/details/44916207 #innodb_flush_method = O_DIRECT-不通过系统缓存直接存入磁盘, innodb_file_format = Barracuda innodb_file_format_max = Barracuda innodb_strict_mode = 1 #innodb独享表空间,有点不少,缺点会致使单个表文件过大 #innodb_file_per_table = 1 #undo日志回滚段 默认为128 innodb_undo_logs = 128 #传统机械硬盘建议使用,而对于固态硬盘能够关闭 #innodb_flush_neighbors = 1 innodb_log_file_size = 1G innodb_log_buffer_size = 64M #控制是否使用独立purge线程 innodb_purge_threads = 1 #改成ON时,容许单列索引最大达到3072。不然最大为767 innodb_large_prefix = 1 innodb_thread_concurrency = 8 #开启后会将全部的死锁记录到error_log中 innodb_print_all_deadlocks = 1 innodb_sort_buffer_size = 16M ########semi sync replication settings######## #半同步复制 plugin_load = "rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so" loose_rpl_semi_sync_master_enabled = 1 loose_rpl_semi_sync_slave_enabled = 1 loose_rpl_semi_sync_master_timeout = 5000 #表示转储每一个bp instance LRU上最热的page的百分比。经过设置该参数能够减小转储的page数。 innodb_buffer_pool_dump_pct = 40 #刷脏的进程N-1 innodb_page_cleaners = 4 innodb_undo_log_truncate = 1 innodb_max_undo_log_size = 2G #控制回收(收缩)undo log的频率.undo log空间在它的回滚段没有获得释放以前不会收缩, innodb_purge_rseg_truncate_frequency = 128 log_timestamps=system #该参数基于MySQL5.7 Group Replication组复制的,没有使用不要设置 #transaction_write_set_extraction=MURMUR32 #https://www.cnblogs.com/hzhida/archive/2012/08/08/2628826.html show_compatibility_56=on