MySQL++:Liunx - MySQL 主從複製

coding++發表於2020-05-19

目標:搭建兩臺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主從複製 相關機制將會在下篇文章持續更新...

 

相關文章