修改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