如何利用视频网站做推广,需要郑州网站建设,怎样推广自己做的网站,长沙理财网站建设系列文章
使用Docker 实现 MySQL 循环复制#xff08;一#xff09; 使用Docker 实现 MySQL 循环复制#xff08;二#xff09; 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…系列文章
使用Docker 实现 MySQL 循环复制一 使用Docker 实现 MySQL 循环复制二 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复制拓扑2.5 导入测试数据并测试复制功能2.6 研究一下 GTID 在 MySQL 复制中的重要作用 3. 常见出错与解决方法 1. 在主机上安装MySQL客户端
dnf install -y mysql在主机验证三个 mysql 容器功能正常
mysql -uroot -poracle -hdocker-host --port3306 -e show variables like server_id;
mysql -uroot -poracle -hdocker-host --port3307 -e show variables like server_id;
mysql -uroot -poracle -hdocker-host --port3308 -e show variables like server_id;通过命令行连接到 MySQL 数据库并查询 server_id 参数的值-h docker-host 表示连接到本地主机docker-host 是主机名--port3308 表示使用 3308 端口连接-e 后面跟的是 SQL 查询语句这里是 show variables like server_id用于查看 server_id 参数的值 2. 配置循环复制拓扑 分别进入三个 MySQL 容器内配置循环复制拓扑。循环复制拓扑里每个主机既是主服务器又是从属服务器。 要在主服务器上做的操作是 创建用于执行复制的 repl 数据库用户授予用户 replacation slave权限 要在从属服务器上做的操作是 修改角色为slave启动复制线程 2.1 进入容器
分别进入三个 MySQL 容器内
docker exec -it mysql-3-mysql1-1 /bin/bash
docker exec -it mysql-3-mysql2-1 /bin/bash
docker exec -it mysql-3-mysql3-1 /bin/bash然后连接MySQL服务器并修改提示符
mysql -uroot -pprompt mysql-1; 2.2 创建复制用户并授予复制权限
在三个 mysql 上分别创建用于执行复制的 repl 数据库用户口令为 oracle并授予replacation slave权限。
每个从服务器需要一个合法的账户来连接主服务器并拉取二进制日志binlog事件。创建一个专用的复制用户可以提供一个安全的身份验证机制确保只有授权的从服务器可以连接到主服务器REPLICATION SLAVE权限是必要的因为它允许复制用户从主服务器读取二进制日志这是复制过程的基础。没有这个权限从服务器将无法从主服务器获取更新
CREATE USER repl IDENTIFIED WITH mysql_native_password BY oracle;GRANT REPLICATION SLAVE ON *.* TO repl;2.3 复位二进制日志
然后分别在三个 mysql 数据库上执行 reset master复位二进制日志以防止重复创建 repl 用户
RESET MASTER;2.4 配置环形复制拓扑
配置mysql2 为 mysql1 的从属服务器mysql3 为 mysql 2 的从属服务器mysql1 为 mysql 3 的从属服务器。这样就形成了一个环形的复制拓扑结构。
所以要分别在三个MySQL里执行语句去修改角色为slave并启动复制线程。
mysql 1:
CHANGE MASTER TO
master_host192.168.30.128,
MASTER_PORT3308,
MASTER_AUTO_POSITION1;
START SLAVE USERrepl PASSWORDoracle;mysql 2:
CHANGE MASTER TO
master_host192.168.30.128,
MASTER_PORT3306,
MASTER_AUTO_POSITION1;
START SLAVE USERrepl PASSWORDoracle;mysql 3:
CHANGE MASTER TO
master_host192.168.30.128,
MASTER_PORT3307,
MASTER_AUTO_POSITION1;
START SLAVE USERrepl PASSWORDoracle;启动线程后检查从属服务器的状态
show slave status\G2.5 导入测试数据并测试复制功能
在 mysql-3-mysql1-1 容器上创建 world 库 因为复制拓扑已经建立所以另外两个容器上的MySQL数据库会同步数据所以现在三个容器上都有world数据库了下面在 mysql-3-mysql2-1 容器上导入 world 数据库下载 world.sql 转储文件在第三个容器3308 端口导入并在三个数据库中检查数据是都同步。 我们先退出容器然后下载world.sql 转储文件
wget https://github.com/memories198/mysql-3/releases/download/mysql/world.sql在第三个容器3308 端口导入
mysql -u root -poracle -hdocker-host --port3308 world world.sql;然后分别进入3个容器中查看数据是否同步 在第二个容器中删除大于 4070 的行检查三个数据库的数据一致性
2.6 研究一下 GTID 在 MySQL 复制中的重要作用
GTID (Global Transaction ID) 是一种用于唯一标识数据库事务的方法。它由两部分组成源服务器 ID 和一个递增的序列号。当一个事务被提交时MySQL 自动为这个事务分配一个新的 GTID并将其添加到 Executed_Gtid_Set 变量中。 Retrieved_Gtid_Set 表示已经从其他服务器接收并应用的 GTID而 Executed_Gtid_Set 则表示在这个服务器上已经执行过的 GTID。
使用GTID的好处;
简化复制配置使用 GTID 后不再需要手动跟踪二进制日志文件名和位置只需要指定主从关系即可。这大大简化了复制配置过程。支持复杂的复制拓扑GTID 允许更灵活的复制拓扑结构如多源复制、环形复制等。这是因为 GTID 能够确保每个事务在整个集群中都是唯一的。提高故障恢复效率如果某个节点发生故障可以快速找到最后一个已处理的 GTID从而确定需要重新同步的数据范围提高故障恢复效率。 3. 常见出错与解决方法
IO线程未正常启动
检查机器/容器之间的连通性检查配置文件是否写错stop slave 停掉复制线程然后resert master 复位二进制日志在此之前先使拓扑里的数据库数据一致。然后重新建立主从关系。
SQL线程未正常启动
因为是学习环境所以直接stop slave 停掉复制线程然后resert master 复位二进制日志然后重新建立主从关系。注意在此之前先使拓扑里的数据库数据一致。