拉取 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 主節點
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 從節點
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'。
在從節點上立即就可以看到這個數據庫。