根據安全性和保密性的要求,內網服務器是不能訪問網絡的,因此只能離線安裝軟件,安裝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