mysql8 主從同步

傻逼CSDN在markdown的預覽模式把我英文引號給轉成中文引號了。

算標題黨一回,其實 mysql8 的主從同步跟 mysql5.7 的沒有什麼不同

master 端配置

配置文件 vim /etc/my.cnf
[mysqld]

# 日誌文件名

log-bin = mysql-bin

# 要同步的數據庫

binlog-do-db = my_db_name

# 主數據庫端ID號

server-id = 1

# 跳過checksum的事件

binlog_checksum = none

然後重啓

創建slave賬號

# grant replication slave on . to ‘slave’@’%’ identified by ‘xxxxxx’;

# flush privileges;

查看master狀態

# show master status;
記住File和position的值,將這裏的值再下面的sql中執行

+------------------+----------+--------------+------------------+-------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000013 |      150 | octopus      |                  |                   |
+------------------+----------+--------------+------------------+-------------------+




slave 端配置

配置文件 vim /etc/my.cnf
[mysqld]

# 主數據庫ID號

server-id = 2

slave_sql_verify_checksum = NONE

replicate-do-db = my_db_name

#replicate-rewrite-db = my_db_name -> new_db_name

然後重啓

執行同步命令,設置主數據庫ip,同步帳號密碼,同步位置

# change master to master_host=‘120.77.xx.xx’,master_user=‘slave’,master_password=‘xxxxxx’,master_log_file=‘mysql-bin.000013’,master_log_pos=150;

開啓同步功能

# start slave;

查看同步狀態

# show slave status\G;
需要slave_io_runing和slave_sql_runing都是Yes,表示成功





注意事項1:

  1. 如果主庫已經投入使用了,此時如果需要主從同步。需要提前在某個時刻,執行 show master status; 然後記下 File 和 Position。這是主庫當前的 sql 執行進度。
  2. 使用命令行或者客戶端(這裏我使用的是 Navicat 的 Dump SQL File),導出所有表結構+數據。然後把這裏 SQL 在從庫中執行。
  3. 在從庫中,使用 change master to…語句把進度指向剛纔記錄下的 File 和 Position 位置。然後開啓 start slave;

注意事項2:

對於主從同步,不同數據庫名,網上搜索到的方法是在從庫配置文件 /etc/my.cnf 使用「replicate-rewrite-db = my_db_name -> new_db_name」替代「replicate-do-db = my_db_name」。
實際操作中,對於表數據的增刪改查可以運行成功。
但是如果涉及修改表結構語句,同步時候會報錯,比如:

Error 'Table 'my_db_name.table_name' doesn't exist' on query. Default database: 'new_db_name'. Query: 'ALTER TABLE `my_db_name`.`table_name`
MODIFY COLUMN `type` int(12) UNSIGNED NOT NULL COMMENT '類型' AFTER `name`'

因爲這裏修改表結構會帶上數據庫的名字,如 「ALTER TABLE my_db_name.table_name…」
看來這個配置並不能全方位的生效啊。

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