Centos7.5 MySQL雙主複製
阿新 • • 發佈:2021-11-03
官方網站:https://mysql-mmm.org/mmm2_guide.html
安裝mysql
mysql倉庫:https://repo.mysql.com/
獲取rpm包
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm
安裝rpm包
sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm
安裝mysql服務
sudo yum install mysql-server
登陸mysql更改密碼
mysql -u root -p
報錯
Can't connect to local MySQL server through socket'/var/lib/mysql/mysql.sock'
更改使用者組許可權,問題解決
chown -R root /var/lib/mysql/
登入更改使用者密碼
mysql -u root -p
預設密碼應該是root,切換到mysql資料庫,然後更改密碼
use mysql; update user set password=PASSWORD("your password") where user='root';
遠端訪問賦權
GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "your password";
master1的基本配置
修改my.cnf
vim /etc/my.cnf
在[mysqld]結點下新增以下內容,而不是[mysqld_safe]結點
server_id = 1 log_bin = /var/log/mysql/mysql-bin.log log_bin_index = /var/log/mysql/mysql-bin.log.index relay_log = /var/log/mysql/mysql-relay-bin relay_log_index = /var/log/mysql/mysql-relay-bin.index expire_logs_days= 10 max_binlog_size = 100M log_slave_updates = 1
另外,移除這一行
bind-address = 127.0.0.1
接著新增下面這三行
# 遞增步長 auto_increment_increment = 1 # 起始偏移 auto_increment_offset = 1 # 用0.0.0.0代替任何ip bind-address = 0.0.0.0
然後重啟mysql
service mysqld restart
重啟mysql卡住
[root@VM-0-12-centos log]# service mysqld restart; Redirecting to /bin/systemctl restart mysqld.service
檢視一下mysql日誌
cat /var/log/mysqld.log
翻到啟動mysql的時間點檢視
可以看到指定的檔案 /var/log/mysql/mysql-bin.log.index 找不到,這個檔案有在my.cnf中配置,盲猜許可權問題
檢視一下使用者組和使用者
cut -d : -f 1 /etc/group cut -d : -f 1 /etc/passwd
能看到mysql組和mysql使用者,更改一下建立配置資料夾餅更改的使用者所有者
mkdir /var/log/mysql chown mysql.mysql /var/log/mysql
然後重啟mysql服務,啟動成功,然後檢視一下master的status
建立使用者
GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'ip' IDENTIFIED BY 'monitor_password'; GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'ip' IDENTIFIED BY 'agent_password'; GRANT REPLICATION SLAVE ON *.* TO 'replication'@'ip' IDENTIFIED BY 'replication_password';
資料庫之間的資料同步
開啟一個終端登入mysql,然後上鎖確保資料庫不會被修改
FLUSH TABLES WITH READ LOCK;
開啟另一個終端,檢視master status,記錄下file和position
匯出當前資料庫的備份
mysqldump -u root -p --all-databases > /tmp/database-backup.sql
把sql檔案匯入到伺服器
scp /tmp/database-backup.sql <user>@ip:/tmp
在其他伺服器上到人檔案
mysql -u root -p < /tmp/database-backup.sql
登陸mysql然後重新整理
FLUSH PRIVILEGES;
配置主從
繼續在其他伺服器上登陸mysql,執行下面指令
CHANGE MASTER TO master_host='192.168.0.11', master_port=3306, master_user='replication', master_password='replication_password', master_log_file='<file>', master_log_pos=<position>;
這裡的master_log_file和master_log_pos都是上面show master status記錄下來值
修改完後,在mysql終端啟動slave
START SLAVE;
參考指令碼
安裝 MySQL
wget http://repo.mysql.com/mysql-community-release-el7-5.noarch.rpm sudo rpm -ivh mysql-community-release-el7-5.noarch.rpm sudo yum -y install mysql-server chown -R root /var/lib/mysql/ chmod -R 777 /var/lib/mysql/ if [ ! -d "/var/log/mysql" ]; then mkdir /var/log/mysql fi chown mysql.mysql /var/log/mysql myconf=$(cat<< EOF skip-grant-tables\nserver_id = $1\nlog_bin = \/var\/log\/mysql\/mysql\-bin.log\nlog_bin_index = \/var\/log\/mysql\/mysql\-bin.log.index\nrelay_log = \/var\/log\/mysql\/mysql\-relay\-bin\nrelay_log_index = \/var\/log\/mysql\/mysql\-relay\-bin.index\nexpire_logs_days = 10\nmax_binlog_size = 100M\nlog_slave_updates = 1\nauto_increment_increment = 1\nauto_increment_offset = 1\nbind\-address = 0.0.0.0 EOF ) echo $myconf sed -i "/\[mysqld\]/a$myconf" /etc/my.cnf service mysqld restart mysql -e"use mysql;update user set password=PASSWORD(\"密碼\") where user='root';" sed -i '/skip-grant-tables/d' /etc/my.cnf service mysqld restart mysql -uroot -p密碼 -e"GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '密碼';GRANT REPLICATION CLIENT ON *.* TO 'mmm_monitor'@'%' IDENTIFIED BY '密碼';GRANT SUPER, REPLICATION CLIENT, PROCESS ON *.* TO 'mmm_agent'@'%' IDENTIFIED BY '密碼';GRANT REPLICATION SLAVE ON *.* TO 'replication'@'%' IDENTIFIED BY '密碼';flush privileges;"
配置主從
#檢視master表 master_status=`mysql -h $1 -uroot -p密碼 -e "show master status;"` #列印master表 echo "$master_status" file=`echo "$master_status" | grep "bin" | awk '{print $1}'` echo "$file" pos=`echo "$master_status" | grep "bin" | awk '{print $2}'` echo "$pos" mysql -h $2 -uroot -pReborn2020 -e "stop slave;" mysql -h $2 -uroot -pReborn2020 -e "change master to master_host='$1',master_user='replication',master_password='Reborn2020',master_log_file='$file',master_log_pos=$pos;" mysql -h $2 -uroot -pReborn2020 -e "start slave;"
匯入表
mysql -uroot -p密碼 < /tmp/database-backup.sql mysql -uroot -p密碼 -e "flush privileges;"
最後效果,雙主中任意一個新增、修改資料,其他三臺機器都會相應改動
論讀書睜開眼,書在面前 閉上眼,書在心裡