Linux下MySQL主從複製

修改my.cnf

vim /data/3306/my.cnf
[mysqld]
log-bin= /data/3306/log-bin
server-id= 6
vim /data/3307/my.cnf
[mysqld]
server-id= 7
  • 主庫必須開啓binlog,如果不是聯級複製從庫可以不用開啓,但是server-id必須唯一
    重啓數據庫
/data/3306/mysql stop
/data/3306/mysql start
/data/3307/mysql stop
/data/3307/mysql start

檢查數據庫配置情況

mysql -S /data/3306/mysql.sock 
mysql> show variables like 'server_id';
mysql> show variables like 'log_bin';

在這裏插入圖片描述

在主庫建立用於同步的rep賬號

mysql>grant replication slave on *.* to rep@'10.0.0.%' identified by '111111';
mysql> flush privileges;
參數 說明
replication slave 主從同步用戶的必須權限,不需要給其他權限
*.* 表示所有表,也可以指定某個庫下的某個表,例如:mysql.user,mysql庫下的user表
[email protected].% rep爲賬號,10.0.0.%爲授權主機網段,使用%表示允許整個10.0.0.0網段以rep用戶訪問
identified by 設置密碼
  • 檢查已建立的賬號
mysql> select user,host from mysql.user;

在這裏插入圖片描述

  • 查看用戶權限
mysql>show grants for rep@'10.0.0.%';

在這裏插入圖片描述

對主數據庫進行鎖表

mysql>flush table with read lock;

引擎不同,鎖表時間會受下面參數控制,鎖表時如果超過設置時間不操作就會自動解鎖
在這裏插入圖片描述
鎖表控制參數,單位:秒,超過這個時間會自動解鎖

鎖表後查看主庫binlog狀態

  • 查看鎖表後主庫binlog信息
mysql>show master status; 

在這裏插入圖片描述

導出主庫數據

鎖表後一定要利用連接工具新開一個窗口導出數據,如果數據量大於50G,並且允許停機,可以停庫直接打包數據文件進行遷移,那樣更快

mysqldump -uroot -S /data/3306/mysql.sock --events -A -B |gzip >/data/mysql_bak.$(date +%F).sql.gz
ll /data/

在這裏插入圖片描述

  • 爲確保在數據導出期間沒有數據寫入,再次查看binlog
mysql>show master status;

需保持導出數據前、後binlog一致

  • 導出數據庫後可以解鎖主庫
msyql>unlock tables;

把主庫數據導入到從庫

  • 在從庫解壓主庫備份文件
gzip -d mysql_bak.2018-12-29.sql.gz 
mysql -uroot -S /data/3307/mysql.sock < /data/mysql_bak.2018-12-29.sql

如果備份時用了-A參數,則在還原數據到3307時,登錄3307密碼也會和3306一致,因爲3307的授權表也被覆蓋了

登錄從庫,配置複製參數

change master to MASTER_HOST='10.0.0.200',MASTER_USER='rep',MASTER_PASSWORD='111111',MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=324;

在這裏插入圖片描述

參數 說明
MASTER_HOST 主庫ip
MASTER_PORT 主庫端口號
MASTER_USER 用於進行復制的用戶
MASTER_PASSWORD 用戶的密碼
MASTER_LOG_FILE 是在主庫show master status時查看的binlog文件名,不能用空格
MASTER_LOG_POS 在主庫show master status時binlog的偏移量,不能有空格
  • 驗證檢查
cat /data/3307/data/master.info

在這裏插入圖片描述

開啓複製

mysql>start slave;
mysql>show slave status;

在這裏插入圖片描述

驗證主從複製結果

  • 主庫
    在這裏插入圖片描述

  • 從庫
    在這裏插入圖片描述

  • 在主庫新建一個數據庫

mysql>create database master;
mysql>show databases;

在這裏插入圖片描述

  • 從庫查看
mysql>show databases;

在這裏插入圖片描述

其他

master開啓二進制日誌後默認記錄所有庫所有表的操作,可以通過配置來指定只記錄指定的數據庫甚至指定的表的操作,具體在mysql配置文件的[mysqld]可添加修改如下選項

  • 不同步哪些庫
    binlog-ignore-db = mysql
    binlog-ignore-db = test
    binlog-ignore-db = information_schema

  • 只同步哪些庫,除此之外不同步
    binlog-do-db = master

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章