目標:搭建兩臺MySQL伺服器,一臺作為主伺服器,一臺作為從伺服器,實現主從複製
環境:虛擬機器
主資料庫:192.168.211.101
從資料庫:192.168.211.102
MySQL 安裝可參考:逛一逛
一):主庫配置步驟
1、配置主庫:授權給從資料庫伺服器
mysql>GRANT REPLICATION SLAVE ON *.* to 'rep1'@'192.168.211.102' identified by 'root';
mysql>FLUSH PRIVILEGES;
2、修改主庫配置檔案,開啟binlog,並設定server-id,每次修改配置檔案後都要重啟mysql服務才會生效
[mysqld] # 同步的日誌路徑及檔名,一定注意這個目錄要是mysql有許可權寫入的 log-bin=mysql-bin # master端的ID號 server-id=1 # 要同步的mstest資料庫,要同步多個資料庫,就多加幾個replicate-db-db=資料庫名 binlog-do-db=verymemory # 要忽略的資料庫 #binlog-ignore-db=mysql
修改完配置後:重啟MySQL服務 如果啟動失敗,通過cat /var/log/mysqld.log | tail -30 檢視mysql啟動失敗的日誌,從日誌內容尋找解決方案。
3、檢視主伺服器當前二進位制日誌名和偏移量,這個操作的目的是為了在從資料庫啟動後,從這個點開始進行資料的恢復
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000004 | 120 | verymemory | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
主伺服器已配置好。
二):從庫配置步驟
1、理所當然也是從配置檔案著手,在/etc/my.cnf 新增下面配置:
[mysqld] server-id=2 master-host=192.168.211.101 master-user=rep1 master-password=root master-port=3306 replicate-do-db=verymemory ......
重啟時報錯:mysqld: unknown variable ‘master-host=
說明mysql不認識這些變數,原因是mysql5.5+版本主從複製不支援這些變數,需要在從庫上用命令來設定:
CHANGE MASTER TO MASTER_HOST='192.168.211.101',MASTER_PORT=3306,MASTER_USER='rep1',MASTER_PASSWORD='root',MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=120;
注意可能存在的錯誤:ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log.
------------------------ ERROR START ------------------------
1、如果版本一樣,請執行以下操作
vim /etc/my.cnf
#新增如下配置
log-bin=mysql-bin
server-id=2
2、如果版本不一樣,請執行以下操作
原因:從 5.6.25 版本使用 innobackupex 備份,在 5.7.15 版本中應用恢復,ibd系統表需要重建
解決步驟:
1):drop 備份的 ibd表
#登入資料庫
mysql -uroot -p
#使用mysql資料庫
use mysql;
#刪除
drop table slave_master_info;
drop table slave_relay_log_info;
drop table slave_worker_info;
drop table innodb_index_stats;
drop table innodb_table_stats;
#重建
source /app/mysql-5.7.25/share/mysql_system_tables.sql
#退出mysql
quit
#重啟mysql
/etc/init.d/mysqld restart
或者service mysqld restart
注:這裡根據自己的mysql路徑進行修改即可
至此,問題解決,登陸資料庫,重新 change master to 即可!
--------------- ERROR END -----------------
2、啟動slave程式
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
3、檢視slave的狀態,如果下面兩項值為YES,則表示配置正確:
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
從庫正在等待主庫更新資料。。。Waitin for master to send event...
到此為止主庫要有操作的話 就會同步到從庫。
三):同步主庫已有資料到從庫 【根據個人情況選擇 是否要操作以下步驟】
主庫操作:
1、停止主庫的資料更新操作
mysql>flush tables with read lock;
2、新開終端,生成主資料庫的備份(匯出資料庫)
./mysqldump -h127.0.0.1 -uroot -proot verymemory > /opt/mysql/install/backups/verymemory.sql
3、將備份檔案傳到從庫
scp /opt/mysql/install/backups/verymemory.sql root@192.168.211.102:/opt/mysql/backups
4、主庫解鎖
mysql>unlock tables;
從庫操作:
1、停止從庫slave
mysql>slave stop;
2、新建資料庫cmdb
mysql> create database verymemory default charset utf8;
3、匯入資料
[root@ops-dev ~]# mysql -uroot -ptest123 verymemory</opt/mysql/install/backups/verymemory.sql
4、檢視從庫已有該資料庫和資料
此時主從庫的資料完全一致,如果對主庫進行增刪改操作,從庫會自動同步進行操作。
更多MySQL主從複製 相關機制將會在下篇文章持續更新...