*配置Replication**
準備兩臺mysql服務器,版本最好一致,防止版本不同帶來的兼容性問題。
第一步:配置
主服務器配置文件:/etc/my.cnf 編輯該文件,添加如下:
[mysqld]
log-bin=/var/log/mysql/mysql-bin //生成bin文件路徑自己指定
server-id=1 //隨意設置數字,保證id是唯一的
日誌目錄:/var/log/mysql 創建:
mkdir -p /var/log/mysql
chown -R mysql.mysql /var/log/mysql //給目錄授權,屬主屬組給mysql
從配置文件:/etc/my.cnf 添加server-id:
[mysqld]
server-id=2 //同上可隨意設置,主要保證它是唯一的就好
重啓服務
systemctl restart mysqld
從服務器需要一個主數據庫存在的用戶來登陸主數據庫獲取數據,所以我們在主數據庫裏創建一個用戶:
1.mysql>CREATE USER 'user_name'@'%'
2.mysql>GRANT USER REPLICATION SLAVE ON *.* TO 'user_name'@'%' identified by '123';
1//%所有主機 ,可以是IP、localhost(本機)
2//REPL..SLAVE-只讀權限,all=所有權限,(庫名).(表名)-代表所有 ,by '密碼'-需遵頊密碼原則
簡單在從服務器測試一下剛纔創建的用戶能否進入主數據庫
[root@localhost ~]# mysql -uuser_name -p'123' -h mysql-master1(主服務器IP)
第二步:主從數據保持一致
主數據庫中是否存有數據,若存有,用mysqldump 導出數據,並導入從數據庫
主:
[root@localhost ~]# mysqldump -uroot -p'xx' -all >/mysql_bak/all.sql
scp /mysql_bak/all.sql 192.168.xx.xx:/root/
從:
[root@localhost ~]# mysqldump -uroot -p'xx' </root/all.sql
最後一步:從數據庫裏配置鏈接
查看主服務器master詳情信息用來配置從數據庫
mysql> FLUSH TABLES WITH READ LOCK; --刷新所有表和阻止寫入
mysql> show master status \G --查看主master的信息
****************** 1. row ****************
File: mysql-bin.000001 --得到起始bin文件名
Position: 0 --得到POS
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
根據上面信息來從數據庫裏面配置:
mysql> CHEANGE MASTER TO
MASTER_HOST='192.168.10.130', --主服務器IP
MASTER_USER='user_name', --連接主服務器數據庫的用戶
MASTER_PASSWORD='123', --用戶密碼
MASTER_LOG_FILE='mysql-bin.000001', --起始bin文件名稱
MASTER_LOG_POS=0;
完成後,啓動從服務器的複製線程並檢查--》啓動:start slave 停止:stop slave
mysql> show slave start; --啓動
Query OK, 0 rows affected (0.09 sec)
show slave status\G; --檢查
長數據中找到:Slave_IO_Running: Yes
Slave_SQL_Running: Yes --yes代表完成主從配置,NO則需要根據報錯排查問題
排錯:IO/SQL常見錯誤分析
IO線程:IO是從服務器用了去主服務器上去查找bin文件的,取回bin文件暫存在一處
SQL線程:從服務器到暫存處讀取bin文件並寫入從數據庫,達到主從數據同步
1、檢查主/var/log/mysql 目錄權限是否賦予給mysql
2、主/etc/my.cnf 配置裏的log-bin文件生成位置是否有多條,註釋掉其他,保留自己設置
3、主數據庫上創建給從用來訪問鏈接的用戶,有權限問題
4、server-id 相同
具體問題具體分析,多根據報錯定位問題,並解決。