Docker MariaDB配置主從複製
阿新 • • 發佈:2022-12-04
編寫主節點配置檔案master.cnf:
[client] # 預設字符集 default-character-set=utf8mb4 [mysqld] # 字符集 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci # 允許最大連結數 max_connections=4096 # 伺服器引擎 default-storage-engine=InnoDB # 表名小寫 # lower_case_table_names=1 # 為每個session 分配的記憶體,在事務過程中用來儲存二進位制日誌的快取 binlog_cache_size=1M # binlog 格式 row statement mixed binlog_format=mixed # 忽略的資料庫binlog binlog-ignore-db=mysql,information_schema # 到期自動刪除 expire_logs_day=7 # 跳過主從複製中遇到的所有錯誤或指定型別的錯誤,避免slave端複製中斷。 # 如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從資料庫資料不一致 slave_skip_errors=1062 # 設定server_id,一般設定為IP,注意要唯一 server-id=1 # bin-log log_bin=mariadb-bin
從節點配置檔案slave.cnf:
[client] # 預設字符集 default-character-set=utf8mb4 [mysqld] # 字符集 character-set-server=utf8mb4 collation-server=utf8mb4_general_ci # 伺服器引擎 default-storage-engine=InnoDB # 表名小寫 # lower_case_table_names=1 # 為每個session 分配的記憶體,在事務過程中用來儲存二進位制日誌的快取 binlog_cache_size=1M # binlog 格式 row statement mixed binlog_format=mixed # 忽略的資料庫binlog binlog-ignore-db=mysql,information_schema # 到期自動刪除 expire_logs_day=7 # 跳過主從複製中遇到的所有錯誤或指定型別的錯誤,避免slave端複製中斷。 # 如:1062錯誤是指一些主鍵重複,1032錯誤是因為主從資料庫資料不一致 slave_skip_errors=1062 # 設定server_id,一般設定為IP,注意要唯一 server-id=10 # bin-log log_bin=slave-mariadb-bin # 表示slave將複製事件寫進自己的二進位制日誌 log_slave_updates=1 # 記錄同步資訊 relay-log=slave-relay-bin # 防止改變資料(除了特殊的執行緒) read_only=1 # 同步重新整理binlog,當事務提交之後,MySQL不做fsync之類的磁碟同步指令重新整理binlog_cache中的資訊到磁碟, # 而讓Filesystem自行決定什麼時候來做同步,或者cache滿了之後才同步到磁碟。 # sync_binlog=n,當每進行n次事務提交之後,MySQL將進行一次fsync之類的磁碟同步指令來將binlog_cache中的資料強制寫入磁碟 # 1 最安全,但是最慢。 0 最快,但是風險最大 sync_binlog=0
docker-compose檔案docker-compose.yml:
version: "3" services: mariadb-master: image: mariadb:10.7.1 container_name: mariadb-master restart: always ports: - "3307:3306" environment: - MARIADB_ROOT_PASSWORD=123 volumes: - ./master/data:/var/lib/mysql:cached - ./master.cnf:/etc/mysql/my.cnf:cached security_opt: - seccomp:unconfined logging: driver: "json-file" options: max-size: "500m" networks: - dev_network mariadb-slave: image: mariadb:10.7.1 container_name: mariadb-slave restart: always ports: - "3308:3306" environment: - MARIADB_ROOT_PASSWORD=123 volumes: - ./slave/data:/var/lib/mysql:cached - ./slave.cnf:/etc/mysql/my.cnf:cached security_opt: - seccomp:unconfined logging: driver: "json-file" options: max-size: "500m" networks: - dev_network networks: dev_network: external: name: dev_network
啟動:
$ sudo docker-compose up -d
Creating mariadb-master ... done
Creating mariadb-slave ... done
檢視列表資訊:
$ sudo docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
452272cd0ee8 mariadb:10.7.1 "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3308->3306/tcp, :::3308->3306/tcp mariadb-slave
750c98f28b24 mariadb:10.7.1 "docker-entrypoint.s…" 10 seconds ago Up 9 seconds 0.0.0.0:3307->3306/tcp, :::3307->3306/tcp mariadb-master
檢視主節點IP:
$ sudo docker inspect 750 | grep IPAddress
"SecondaryIPAddresses": null,
"IPAddress": "",
"IPAddress": "172.18.0.2",
同理可得從節點IP為172.18.0.2
連線主節點:
$ mysql -u root -h 172.18.0.2 -p
Enter password:
執行:
mysql> create user 'slave'@'%' identified by '123';
Query OK, 0 rows affected (0.04 sec)
mysql> grant replication slave on *.* to 'slave'@'%';
Query OK, 0 rows affected (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+--------------------+----------+--------------+--------------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+--------------------+----------+--------------+--------------------------+
| mariadb-bin.000003 | 771 | | mysql,information_schema |
+--------------------+----------+--------------+--------------------------+
連線從節點執行:
mysql> change master to master_host='mariadb-master',master_port=3306,master_user='slave',master_password='123',master_log_file='mariadb-bin.000003',master_log_pos=771;
Query OK, 0 rows affected (0.02 sec)
mysql> start slave;
Query OK, 0 rows affected (0.01 sec)
mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: mariadb-master
Master_User: slave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mariadb-bin.000003
Read_Master_Log_Pos: 771
Relay_Log_File: slave-relay-bin.000002
Relay_Log_Pos: 557
Relay_Master_Log_File: mariadb-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
完成