如何自己办网站,安徽建设监理协会,房建设计图网站,pageadmin系统目录
1 实验介绍 2 实验准备 2.1 创建目录为MySQL挂载使用 2.2 编写 docker-compose.yml 文件 2.3 启动容器 3 主从复制操作 3.1 MASTER 操作指令 3.2 SLAVE1 操作指令 3.3 SLAVE2 操作指令 4 验证是否实现主从 4.1 导入sql脚本查看是否正常主从复制 4.2 检验从库是否看见复制…目录
1 实验介绍 2 实验准备 2.1 创建目录为MySQL挂载使用 2.2 编写 docker-compose.yml 文件 2.3 启动容器 3 主从复制操作 3.1 MASTER 操作指令 3.2 SLAVE1 操作指令 3.3 SLAVE2 操作指令 4 验证是否实现主从 4.1 导入sql脚本查看是否正常主从复制 4.2 检验从库是否看见复制是否成功 1 实验介绍
本次实验 使用 docker 镜像开启三个容器实现一主两从。
容器主机IP地址映射主机端口mysql-master192.168.1.23306mysql-slave1192.168.1.33307mysql-slave2192.168.1.43308 2 实验准备
2.1 创建目录为MySQL挂载使用
使用 docker 做MySQL这一种有状态的需要很好的保持数据的可靠性所以得使用宿主机挂载到容器内 [rootchucong mysql_zhucong]# tree /data/ -L 3/data/├── master # master的目录│ ├── conf # 配置文件存放目录│ │ └── my.cnf # 配置文件│ └── master-data # 存放数据的地方├── slave1│ ├── conf│ │ └── my.cnf│ └── slave1-data└── slave2├── conf│ └── my.cnf└── slave2-data# MySQL 配置文件[rootchucong mysql_zhucong]# cat /data/master/conf/my.cnf [mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.socksymbolic-links0log_binmysql-bin # 开启bin-log日志注意只有主配置文件需开启server_id10#gtid_modeON # 开启GTID#enforce-gtid-consistencyON # 保证GTID的强一致性[rootchucong mysql_zhucong]# cat /data/slave1/conf/my.cnf [mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.socksymbolic-links0server_id20#super_read_onlyon #只读#gtid_modeON # 开启GTID#enforce-gtid-consistencyON # 保证GTID的强一致性[rootchucong mysql_zhucong]# cat /data/slave2/conf/my.cnf [mysqld]datadir/var/lib/mysqlsocket/var/lib/mysql/mysql.socksymbolic-links0server_id30#super_read_onlyon #只读#gtid_modeON # 开启GTID#enforce-gtid-consistencyON # 保证GTID的强一致性 2.2 编写 docker-compose.yml 文件
[rootchucong mysql_zhucong]# docker pull mysql:9.1.0
[rootchucong mysql_zhucong]# vim docker-compose.yml version: 2.27.1services:mysql-master:image: mysql:9.1.0container_name: mysql-masterenvironment: # 定义系统值MYSQL_ROOT_PASSWORD: root # root密码MYSQL_USER: repl # 创建复制用户MYSQL_PASSWORD: root # 设置密码ports:- 3306:3306volumes:- /data/master/master-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/master/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.2mysql-slave1:image: mysql:9.1.0container_name: mysql-slave1environment:MYSQL_ROOT_PASSWORD: rootMYSQL_USER: replMYSQL_PASSWORD: rootports:- 3307:3306volumes:- /data/slave1/slave1-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/slave1/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.3mysql-slave2:image: mysql:9.1.0container_name: mysql-slave2environment:MYSQL_ROOT_PASSWORD: rootMYSQL_USER: replMYSQL_PASSWORD: rootports:- 3308:3306volumes:- /data/slave2/slave2-data:/var/lib/mysql # 挂载宿主机目录到容器- /data/slave2/conf/my.cnf:/etc/my.cnfrestart: alwaysnetworks:mynet1:ipv4_address: 192.168.1.4networks:mynet1: # 使用自定义桥接模式driver: bridgeipam:config:- subnet: 192.168.1.0/24 # 定义网段gateway: 192.168.1.1 # 定义网关 2.3 启动容器 [rootchucong zhucong]# docker compose up -d # 查看容器是否运行[rootchucong zhucong]# docker ps CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMESe5776a980697 mysql:9.1.0 docker-entrypoint.s… 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3307-3306/tcp, :::3307-3306/tcp mysql-slave10bb3a700077c mysql:9.1.0 docker-entrypoint.s… 59 minutes ago Up 43 minutes 33060/tcp, 0.0.0.0:3308-3306/tcp, :::3308-3306/tcp mysql-slave2af2f63aa00e8 mysql:9.1.0 docker-entrypoint.s… 59 minutes ago Up 4 seconds 0.0.0.0:3306-3306/tcp, :::3306-3306/tcp, 33060/tcp mysql-master 3 主从复制操作
3.1 MASTER 操作指令
[rootchucong mysql_zhucong]# docker exec -it mysql-master bash
bash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建设置了可以省略以下命令mysql CREATE USER repl% IDENTIFIED BY root;# 赋予所有库所有表 repl 用户 REPLICATION SLAVE 的权限mysql GRANT REPLICATION SLAVE ON *.* TO repl%;mysql FLUSH PRIVILEGES;mysql SHOW BINARY LOG STATUS\G # 与过往版本不一样了以前为 SHOW MASTER status\G*************************** 1. row ***************************File: mysql-bin.000034 # 注意此处的Position: 198 # 还有此出处这两行在从库操作的时候有至关重要的作用Binlog_Do_DB: Binlog_Ignore_DB: Executed_Gtid_Set: d83de5a7-b723-11ef-a65b-0242c0a80104:1-21 row in set (0.00 sec) 3.2 SLAVE1 操作指令 [rootchucong mysql_zhucong]# docker exec -it mysql-slave1 bashbash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建设置了可以省略以下命令mysql CREATE USER repl% IDENTIFIED BY root;# 以下这整条命令也是发生了巨大的改变并且不需要指定端口了mysql CHANGE REPLICATION SOURCE TOSOURCE_HOST192.168.1.2, # MASTER 的 IPSOURCE_USERrepl, # 创建的用户SOURCE_PASSWORDroot, # 密码SOURCE_LOG_FILEmysql-bin.000034, # 为主库使用 SHOW BINARY LOG STATUS\G 中的File值GET_SOURCE_PUBLIC_KEY1, # 此处注意 自动获取主服务器的公钥适用于caching_sha2_passwordSOURCE_LOG_POS198; # 为主库使用 SHOW BINARY LOG STATUS\G 中的Position值# 旧版本的命令如下可指定端口# mysql CHANGE MASTER TO # - MASTER_HOST192.168.1.2,# - MASTER_PORT3306,# - MASTER_USERrepl,# - MASTER_PASSWORDroot,# - MASTER_LOG_FILEmysql-bin.000034,# - MASTER_LOG_POS198;mysql START REPLICA; # 启动复制 9.1.0 变化的命令 以前版本为 START SLAVE;mysql SHOW REPLICA STATUS; # 启动复制 9.1.0 变化的命令 以前版本为 SHOW SLAVE STATUS;mysql SHOW REPLICA STATUS\G*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.2Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000034Read_Source_Log_Pos: 7061047Relay_Log_File: e5776a980697-relay-bin.000002Relay_Log_Pos: 7061177Relay_Source_Log_File: mysql-bin.000034Replica_IO_Running: Yes # IO 线程YES表示已经连接成功如果不是会显示no或者connectReplica_SQL_Running: Yes 3.3 SLAVE2 操作指令 [rootchucong mysql_zhucong]# docker exec -it mysql-slave2 bashbash-5.1# mysql -uroot -proot# 假如说没有设置变量自动创建可以手动创建设置了可以省略以下命令mysql CREATE USER repl% IDENTIFIED BY root;# 以下这整条命令也是发生了巨大的改变并且不需要指定端口了mysql CHANGE REPLICATION SOURCE TOSOURCE_HOST192.168.1.2, # MASTER 的 IPSOURCE_USERrepl, # 创建的用户SOURCE_PASSWORDroot, # 密码SOURCE_LOG_FILEmysql-bin.000034, # 为主库使用 SHOW BINARY LOG STATUS\G 中的File值GET_SOURCE_PUBLIC_KEY1, # 此处注意 自动获取主服务器的公钥适用于caching_sha2_passwordSOURCE_LOG_POS198; # 为主库使用 SHOW BINARY LOG STATUS\G 中的Position值# 旧版本的命令如下可指定端口# mysql CHANGE MASTER TO # - MASTER_HOST192.168.1.2,# - MASTER_PORT3306,# - MASTER_USERrepl,# - MASTER_PASSWORDroot,# - MASTER_LOG_FILEmysql-bin.000034,# - MASTER_LOG_POS198;mysql START REPLICA; # 启动复制 9.1.0 变化的命令 以前版本为 START SLAVE;mysql SHOW REPLICA STATUS; # 启动复制 9.1.0 变化的命令 以前版本为 SHOW SLAVE STATUS;mysql SHOW REPLICA STATUS\G*************************** 1. row ***************************Replica_IO_State: Waiting for source to send eventSource_Host: 192.168.1.2Source_User: replSource_Port: 3306Connect_Retry: 60Source_Log_File: mysql-bin.000034Read_Source_Log_Pos: 7061047Relay_Log_File: 0bb3a700077c-relay-bin.000002Relay_Log_Pos: 7061177Relay_Source_Log_File: mysql-bin.000034Replica_IO_Running: YesReplica_SQL_Running: Yes 4 验证是否实现主从
4.1 导入sql脚本查看是否正常主从复制 # MASTER[rootchucong ~]# docker cp smart_work_v3.sql mysql-master:/Successfully copied 6.53MB to mysql-master:/[rootchucong ~]# docker exec -it mysql-master bashbash-5.1# ls afs boot docker-entrypoint-initdb.d home lib64 mnt proc run smart_work_v3.sql sys usrbin dev etc lib media opt root sbin srv tmp varbash-5.1# mysql -uroot -prootmysql CREATE DATABASE shuyan; # 创建数据库mysql USE shuyan # 切换到数据库Database changedmysql SOURCE smart_work_v3.sql # 导入sql脚本mysql SHOW TABLES;----------------------------------------| Tables_in_shuyan |----------------------------------------| aaa || abi_http_log || act_app_appdef || act_app_databasechangelog || act_app_databasechangeloglock || act_app_deployment || act_app_deployment_resource || act_cmmn_casedef |---------------------------------------- 4.2 检验从库是否看见复制是否成功
mysql USE shuyan;Reading table information for completion of table and column namesYou can turn off this feature to get a quicker startup with -ADatabase changedmysql SHOW TABLES;----------------------------------------| Tables_in_shuyan |----------------------------------------| aaa || abi_http_log || act_app_appdef || act_app_databasechangelog || act_app_databasechangeloglock || act_app_deployment || act_app_deployment_resource || act_cmmn_casedef || act_cmmn_databasechangelog || act_cmmn_databasechangeloglock || act_cmmn_deployment |----------------------------------------