Mysql主從複製的搭建-基於Docker

     本方基於docker搭建mysql的主從複製。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
  • 運行mysql的docker容器,這裏先啓動一個主節點的mysql
#docker run -it -p 3306:3306 --name mysql-master -e MYSQL_ROOT_PASSWORD=scgaopan -d mysql:5.6.40
  • 進入主節點的mysql容器
#docker exec -it mysql-master /bin/bash
  • 在容器裏面執行:複製一個mysql的配置文件到/etc下
root@9034029c98c5:/# cp /usr/share/mysql/my-default.cnf /etc/my.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客戶端鏈接主節點的mysql
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)
  • 同理運行一個mysql從節點
#docker run -it -p 3306:3306 --name mysql-slave -e MYSQL_ROOT_PASSWORD=scgaopan -d mysql:5.6.40
  • 從點節my.cnf配置以下,從節點是沒有必要開啓bin log的,只須要設置一個server_id就能夠了
[mysqld]


#給主節點設置server_id
server_id=2

sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 用客戶端程序鏈接從節點mysql
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

相關文章
相關標籤/搜索