天天看點

docker安裝mysql主從同步

docke-compose.yml

version: '3'
services:
  master_mysql:
    container_name: master_mysql
    image: mysql:5.7
    ports:
      - '3306:3306'
    volumes:
      - './mysql_data/master:/var/lib/mysql'
      - './mysql_conf/master/my.cnf:/etc/mysql/conf.d/master.cnf'
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
  slave_mysql:
    container_name: slave_mysql
    image: mysql:5.7
    ports:
      - '3307:3306'
    volumes:
      - './mysql_data/slave:/var/lib/mysql'
      - './mysql_conf/slave/my.cnf:/etc/mysql/conf.d/slave.cnf'
    environment:
      MYSQL_ROOT_PASSWORD: '123456'
           

./mysql_conf/master/my.cnf

[mysqld]
user=mysql
log-bin=mysql-master01-bin
server-id=1
[client]
port = 3306 # 設定mysql用戶端連接配接服務端時預設使用的端口
[mysql]
default-character-set=utf8 # 設定mysql用戶端預設字元
bind-address = 0.0.0.0
           

./mysql_conf/slave/my.cnf

[mysqld]
user=mysql
log-bin=mysql-slave01-bin
server-id=2
[client]
port = 3306 # 設定mysql用戶端連接配接服務端時預設使用的端口
[mysql]
default-character-set=utf8 # 設定mysql用戶端預設字元
bind-address = 0.0.0.0
           

運作:docker-compose up -d

一. 進入master運作:show master status;

記住file的值.
建立使用者:create user zwq;
賦予權限:GRANT ALL PRIVILEGES ON *.* TO zwq@'%' IDENTIFIED BY '123456'; FLUSH PRIVILEGES;
參數說明:
1.FLUSH PRIVILEGES;這個指令必須填寫,否則上面設定的使用者權限失效。
2.ip位址是可以設定範圍的。例如:GRANT REPLICATION SLAVE ON *.* TO'linzhiqiang'@'192.168.0.%' IDENTIFIED BY'220316';
3.操作的資料庫也是可以指定的。
4.使用者的權限也是可以設定的。具體的指令大家可以自己去學習,我這裡就不多說了。
如果不設定使用者權限的話,本地可以連接配接的上mysql伺服器,區域網路或者外網是連接配接不上,會顯示連接配接被拒絕或者使用者沒有這個權限。除此之外權限還可以精确到某個資料庫,連接配接者的IP位址區間,設定是某個資料的操作問題等等都可以進行設定。我這邊設定的是zwq這個使用者具備所有使用者資料庫的權限,所有的ip位址都可以通過Master這個使用者來連接配接主資料庫。

二. 進入slave

change master to
master_host='192.168.88.22', //Master 主控端Ip位址
master_port=3306,//Master 端口号
master_user='zwq',//Master 使用者名
master_password='123456',//使用者密碼
master_log_file='mysql-master01-bin.000003',//Master伺服器産生的日志要和Master伺服器所配置的互相對應如下如所示的file對應(上面記住的file值)
master_log_pos=0;//要和Master伺服器所配置的互相對應如下如所示的Position對應(經過測試發現如果是一樣的隻能同步一次,是以這裡修正成0,0是可以每次都同步成功的)

然後運作:start slave
檢視狀态是否正确:show slave status\G

最後進行測試.