mysql8.0以後的版本,進行多主一從的叢集環境搭建

夢 裡 不 知 身 是 客發表於2019-06-17

寫在前面:
網上充滿了關於mysql多主一從的環境搭建,但是大多關於mysql5.6左右的版本,版本較低,最近在使用mysql8.0的時候,發現很多命令已經過時了,不再適用8.0以後的版本,一如之前修改root密碼,常用的授權語句均不在適用,今天在搭建多主一從的時候,發現了同樣的問題,隨記錄下來,防止遺忘

一、思路:

顧名思義,多主一從,具有多臺master主機,只有一臺slave主機
也就是隻用一臺slave主機來備份多臺master主機的資料庫資料
方法:兩臺master主機均開啟bin-log日誌,新增不同的server-id號,均授權replicate slave許可權
具體可以參考之前的一主一從的搭建過程,有詳細記錄
slave主機,需要修改MySQL配置檔案,開啟Multi功能支援多執行緒MySQL執行

二、配置:

兩臺master配置不在贅述,可以參考
https://blog.51cto.com/ahcwy/1940177
著重介紹,mysql8.0以後slave與以往的不同
配置檔案:開啟Multi功能支援多執行緒MySQL執行,新增兩個執行緒的資料庫不同埠號,資料庫資料的存放目錄,datadir、pid-file、socket兩個執行緒的配置均在不同目錄下mysqla和mysqlb裡面,伺服器的server-id要一樣

[root@localhost etc]# cat my.cnf
# For advice on how to change settings please see
# http://dev.mysql.com/doc/refman/8.0/en/server-configuration-defaults.html

[mysqld]
#
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
#
# Remove the leading "# " to disable binary logging
# Binary logging captures changes between backups and is enabled by
# default. It's default setting is log_bin=binlog
# disable_log_bin
#
# Remove leading # to set options mainly useful for reporting servers.
# The server defaults are faster for transactions and fast SELECTs.
# Adjust sizes as needed, experiment to find the optimal values.
# join_buffer_size = 128M
# sort_buffer_size = 2M
# read_rnd_buffer_size = 2M
#
# Remove leading # to revert to previous value for default_authentication_plugin,
# this will increase compatibility with older clients. For background, see:
# https://dev.mysql.com/doc/refman/8.0/en/server-system-variables.html#sysvar_default_authentication_plugin
# default-authentication-plugin=mysql_native_password

datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock

log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid

[mysqld_muliti]

mysqld=/usr/bin/mysqld_safe

mysqladmin=/usr/bin/mysqladmin

user=root

password=123456

[mysqld178]

port=3306

datadir=/var/lib/mysqla

pid-file=/var/lib/mysqla/mysqld.pid

socket=/var/lib/mysqla/mysql.sock

user=mysql

server-id=3

[mysqld179]

port=3307

datadir=/var/lib/mysqlb

pid-file=/var/lib/mysqlb/mysqld.pid

socket=/var/lib/mysqlb/mysql.sock

user=mysql

server-id=3

借圖一用,進行解釋:
在這裡插入圖片描述
配置完了,需要初始化資料庫,生成目錄mysqla和mysqlb
重點來了,下面的語句不再生效,已經不識別了 mysql_install_db ,已經在/usr/bin/下面找不到該命令了
在這裡插入圖片描述
最新8.0已經改為了 mysqld --initialize命令,效果如下:

[root@localhost etc]# mysqld --initialize --datadir=/var/lib/mysqla --user=mysql
[root@localhost etc]# mysqld --initialize --datadir=/var/lib/mysqlb --user=mysql

[root@localhost etc]# cd /var/lib/mysqla/
[root@localhost mysqla]# ll
total 155712
-rw-r-----. 1 root root       56 Jun 16 06:57 auto.cnf
-rw-------. 1 root root     1676 Jun 16 06:57 ca-key.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 ca.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 client-cert.pem
-rw-------. 1 root root     1676 Jun 16 06:57 client-key.pem
-rw-r-----. 1 root root     5750 Jun 16 06:57 ib_buffer_pool
-rw-r-----. 1 root root 12582912 Jun 16 06:57 ibdata1
-rw-r-----. 1 root root 50331648 Jun 16 06:57 ib_logfile0
-rw-r-----. 1 root root 50331648 Jun 16 06:57 ib_logfile1
drwxr-x---. 2 root root     4096 Jun 16 06:57 #innodb_temp
drwxr-x---. 2 root root     4096 Jun 16 06:57 mysql
-rw-r-----. 1 root root 25165824 Jun 16 06:57 mysql.ibd
drwxr-x---. 2 root root     4096 Jun 16 06:57 performance_schema
-rw-------. 1 root root     1680 Jun 16 06:57 private_key.pem
-rw-r--r--. 1 root root      452 Jun 16 06:57 public_key.pem
-rw-r--r--. 1 root root     1112 Jun 16 06:57 server-cert.pem
-rw-------. 1 root root     1680 Jun 16 06:57 server-key.pem
drwxr-x---. 2 root root     4096 Jun 16 06:57 sys
-rw-r-----. 1 root root 10485760 Jun 16 06:57 undo_001
-rw-r-----. 1 root root 10485760 Jun 16 06:57 undo_002
[root@localhost mysqla]# 
[root@localhost mysqla]# cd /var/lib/mysqlb/
[root@localhost mysqlb]# ll
total 155712
-rw-r-----. 1 mysql mysql       56 Jun 16 06:58 auto.cnf
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 ca-key.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 ca.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 client-cert.pem
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 client-key.pem
-rw-r-----. 1 mysql mysql     5750 Jun 16 06:58 ib_buffer_pool
-rw-r-----. 1 mysql mysql 12582912 Jun 16 06:58 ibdata1
-rw-r-----. 1 mysql mysql 50331648 Jun 16 06:58 ib_logfile0
-rw-r-----. 1 mysql mysql 50331648 Jun 16 06:58 ib_logfile1
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 #innodb_temp
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 mysql
-rw-r-----. 1 mysql mysql 25165824 Jun 16 06:58 mysql.ibd
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 performance_schema
-rw-------. 1 mysql mysql     1680 Jun 16 06:58 private_key.pem
-rw-r--r--. 1 mysql mysql      452 Jun 16 06:58 public_key.pem
-rw-r--r--. 1 mysql mysql     1112 Jun 16 06:58 server-cert.pem
-rw-------. 1 mysql mysql     1676 Jun 16 06:58 server-key.pem
drwxr-x---. 2 mysql mysql     4096 Jun 16 06:58 sys
-rw-r-----. 1 mysql mysql 10485760 Jun 16 06:58 undo_001
-rw-r-----. 1 mysql mysql 10485760 Jun 16 06:58 undo_002

改變mysqla和mysqlb目錄及以下的檔案屬主為mysql(防止出現許可權問題)

[root@localhost lib]# chown -R mysql:mysql mysqla

啟動服務:(1,2是兩臺master主機的server-id號)

[root@localhost lib]# mysqld_multi --defaults-file=/etc/my.cnf start 1 
[root@localhost lib]# mysqld_multi --defaults-file=/etc/my.cnf start 2

檢視埠,觀察服務是否啟動成功

相關文章