Docker 搭建 MySQL8.0 主從復制環境


 

  拉取 docker 鏡像

docker pull mysql/mysql-server:8.0

  創建 docker 網絡

docker network create mysql_network

  運行 MySQL 主節點

docker run -p 3306:3306 --name mysql_master -h mysql_master --net=mysql_network --restart=always \
    -v ~/docker/mysql/mysql_master/log:/var/log/mysql \
    -v ~/docker/mysql/mysql_master/data:/var/lib/mysql \
    -v ~/docker/mysql/mysql_master/conf:/etc/mysql \
    -e lower_case_table_names=1 \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql/mysql-server:8.0

  編輯主節點配置文件

vi ~/docker/mysql/mysql_master/conf/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='set collation_connection=utf8mb4_unicode_ci; set names utf8mb4;'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=1
log-bin=mysql-bin
#binlog-do-db=test_db
binlog-ignore-db=mysql
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
mysql_master/conf/my.cnf

  重啟 MySQL 主節點

docker restart mysql_master

  在主節點創建用戶,用於復制主節點數據到從節點

docker exec -it mysql_master mysql -uroot -proot

create user 'mysql_slave'@'%' identified with mysql_native_password by '123456';

grant replication slave, replication client on *.* to 'mysql_slave'@'%';

 

  運行 MySQL 從節點

docker run -p 3307:3306 --name mysql_slave -h mysql_slave --net=mysql_network --restart=always \
    -v ~/docker/mysql/mysql_slave/log:/var/log/mysql \
    -v ~/docker/mysql/mysql_slave/data:/var/lib/mysql \
    -v ~/docker/mysql/mysql_slave/conf:/etc/mysql  \
    -e lower_case_table_names=1 \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql/mysql-server:8.0

  編輯從節點配置文件

vi ~/docker/mysql/mysql_slave/conf/my.cnf
[client]
default-character-set=utf8mb4
[mysql]
default-character-set=utf8mb4
[mysqld]
init_connect='set collation_connection=utf8mb4_unicode_ci; set names utf8mb4;'
character-set-server=utf8mb4
collation-server=utf8mb4_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
server-id=2
log-bin=mysql-slave-bin
#binlog-do-db=test_db
binlog-ignore-db=mysql
relay_log=mysql-relay-bin
binlog_cache_size=1M
binlog_format=mixed
expire_logs_days=7
slave_skip_errors=1062
read_only=1
log_slave_updates=1
mysql_slave/conf/my.cnf

  重啟 MySQL 從節點

docker restart mysql_slave

  查看主節點日志文件和位置。可以看到文件名為 mysql-bin.000002,位置在693。

docker exec -it mysql_master mysql -uroot -proot
show master status;

 

  登錄從節點,與主節點之間建立關聯

docker exec -it mysql_slave mysql -uroot -proot

change master to master_host='mysql_master', master_user='mysql_slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000002', master_log_pos=693, master_connect_retry=30;

  查看從節點狀態

show slave status\G;

  啟動主從復制

start slave;

  再次查看,可以看到 Slave_IO_Running 和 Slave_SQL_Running 兩個進程已經啟動了。

 

主從復制測試

  在主節點創建一個數據庫 'test_db'。

  在從節點上立即就可以看到這個數據庫。

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM