本方基於docker搭建mysql的主從複製。mysql
# docker pull mysql:5.6.40 # docker images REPOSITORY TAG IMAGE ID CREATED SIZE docker.io/mysql 5.6.40 50328380b2b4 4 months ago 256 MB
#docker run -it -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=scgaopan -d mysql:5.6.40
#docker exec -it mysql-master /bin/bash
root@9034029c98c5:/# cp /usr/share/mysql/my-default.cnf /etc/my.cnf
[mysqld] #打開主節點的bin log log_bin=mysql-bin #給主節點設置server_id server_id=1 #設置mysql binlog的日誌模式 binlog-format=ROW sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
修改完成後重啓主節點mysqlsql
這裏說一下mysql-binlog的三種模式: 1.Statement level(默認) 記錄每一條修改數據的SQL語句。statement模式記錄的更改的SQ語句事件,並不是每條更改記錄,因此大大減小了binlog日誌量,節約磁盤IO,提升性能。 2.ROW Level 記錄的方式是行,即若是批量修改數據,記錄的不是批量修改的SQL語句事件,而是每條記錄被更改的SQL語句,所以,ROW模式的binlog日誌文件會變得很「重」。row level的binlog日誌內容會很是清楚的記錄下每一行數據被修改的細節,可用於數據誤操做後,對數據的還原 3. Mixed 實際上就是前兩種模式的結合。在Mixed模式下,MySQL會根據執行的每一條具體的sql語句來區分對待記錄的日誌形式,也就是在Statement和Row之間選擇一種。
mysql> show master status\G; *************************** 1. row *************************** File: mysql-bin.000001 Position: 120 Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: 1 row in set (0.00 sec) #建立一個用戶 mysql> create user 'repluser01'@'*' identified by 'scgaopan'; Query OK, 0 rows affected (0.00 sec) #給此用戶replication slave的權限 mysql> grant replication slave on *.* to 'repluser01'@'%' identified by 'scgaopan'; Query OK, 0 rows affected (0.00 sec) mysql> flush privileges; Query OK, 0 rows affected (0.01 sec)
#docker run -it -p 3306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=scgaopan -d mysql:5.6.40
[mysqld] #給主節點設置server_id server_id=2 sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
mysql> show slave status\G; mysql> change master to -> master_host='172.17.0.2',#主節點ip -> master_user='repluser01',#用戶名 -> master_password='scgaopan',#密碼 -> master_log_file='mysql-bin.000001',#主節點show master status中的信息 -> master_log_pos=120; mysql>start slave;#啓動同步線程
若是沒有報錯,主從複製就搭建好了docker