千家信息网

Docker 中怎么实现MySQL主主复制

发表于:2025-01-23 作者:千家信息网编辑
千家信息网最后更新 2025年01月23日,Docker 中怎么实现MySQL主主复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。安装DockerInstall Docker E
千家信息网最后更新 2025年01月23日Docker 中怎么实现MySQL主主复制

Docker 中怎么实现MySQL主主复制,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

安装Docker

  1. Install Docker Engine on CentOS

MySQL配置

  1. Master

  • 新建目录data(XXXX/master/data),映射docker数据库目录

  • 新建配置(XXXX/master/my.cnf)

[mysqld]skip-host-cacheskip-name-resolvedatadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksecure-file-priv=/var/lib/mysql-filesuser=mysqlpid-file=/var/run/mysqld/mysqld.pid# replication # server id 唯一server_id=1# STATEMENT, ROW, or MIXEDbinlog_format=ROWlog_bin=/var/lib/mysql/master-binauto-increment-increment=2auto-increment-offset=1slave-skip-errors=all# 不进行复制的数据库replicate-ignore-db=information_schemareplicate-ignore-db=mysqlreplicate-ignore-db=performance_schemareplicate-ignore-db=sys
  1. Replica

  • 新建目录data(XXXX/rep/data),映射docker数据库目录

  • 新建配置(XXXX/rep/my.cnf)

[mysqld]skip-host-cacheskip-name-resolvedatadir=/var/lib/mysqlsocket=/var/lib/mysql/mysql.socksecure-file-priv=/var/lib/mysql-filesuser=mysqlpid-file=/var/run/mysqld/mysqld.pid# replication# server id 唯一server_id=2# STATEMENT, ROW, or MIXEDbinlog_format=ROWlog_bin=/var/lib/mysql/rep-binauto-increment-increment=2auto-increment-offset=1slave-skip-errors=all# 不进行复制的数据库replicate-ignore-db=information_schemareplicate-ignore-db=mysqlreplicate-ignore-db=performance_schemareplicate-ignore-db=sys

新增Bridge类型网络

docker network create mysql_net
  • mysql服务连接到新增的网络mysql_net

  • mysql服务可以通过主机名互相访问

启动MySQL服务

  1. Master

docker container run --name mysql_master \    --network mysql_net \    --hostname mysql_master \    --publish 33306:3306 \    --env MYSQL_ROOT_PASSWORD=123456 \    --mount type=bind,src=/xxxx/master/my.cnf,dst=/etc/my.cnf \    --mount type=bind,src=/xxxx/master/data,dst=/var/lib/mysql \    -d mysql/mysql-server:8.0 --character-set-server=utf8 --collation-server=utf8_general_ci --explicit_defaults_for_timestamp
  1. Replica

docker container run --name mysql_rep \    --network mysql_net \    --hostname mysql_rep \    --publish 43306:3306 \    --env MYSQL_ROOT_PASSWORD=123456 \    --mount type=bind,src=/xxx/repl/my.cnf,dst=/etc/my.cnf \    --mount type=bind,src=/xxx/repl/data,dst=/var/lib/mysql \    -d mysql/mysql-server:8.0 --character-set-server=utf8 --collation-server=utf8_general_ci --explicit_defaults_for_timestamp
  1. 参数说明

  • XXX:替换为有效的路径

  • network:指定为新增的网络mysql_net

  • hostname:服务主机名

  • publish:端口映射([docker host Port]:[container Port])

  • MYSQL_ROOT_PASSWORD: MySQL默认密码

  • mount:挂载配置文件及数据库文件目录

  1. 查看MySQL服务是否正常启动

# 查看Docker container进程docker container ps -a | grep mysql# 查看启动日志docker container logs mysql_masterdocker container logs mysql_rep

数据库配置

  1. 新增具复制权限的用户

  • 登录主数据库

# 登入 mysql_masterdocker container exec -it mysql_master bash# 连接数据库,密码为配置文件中指定的123456mysql -u root -p# 新增复制用户并赋复制权限CREATE USER 'dev'@'%' IDENTIFIED BY '123456';GRANT ALL ON *.* TO 'dev'@'%';
  • 登录备数据库

# 登入 mysql_repdocker container exec -it mysql_rep bash# 连接数据库,密码为配置文件中指定的123456mysql -u root -p# 新增复制用户并赋复制权限CREATE USER 'dev'@'%' IDENTIFIED BY '123456';GRANT ALL ON *.* TO 'dev'@'%';
  1. 分别查看主从服务数据库状态

# 主数据库mysql> SHOW MASTER STATUS;+-------------------+----------+--------------+------------------+-------------------+| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+-------------------+----------+--------------+------------------+-------------------+| master-bin.000005 |      445 |              |                  |                   |+-------------------+----------+--------------+------------------+-------------------+# 备数据库mysql> SHOW MASTER STATUS;+----------------+----------+--------------+------------------+-------------------+| File           | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |+----------------+----------+--------------+------------------+-------------------+| rep-bin.000002 |      155 |              |                  |                   |+----------------+----------+--------------+------------------+-------------------+
  1. 配置数据库复制

  • 配置备数据库mysql_rep

# MASTER_HOST:主数据库服务名# MASTER_LOG_FILE: 日志文件名称# MASTER_LOG_POS:  日志文件当前位置mysql> CHANGE MASTER TO    MASTER_HOST='mysql_master',    MASTER_USER='dev',    MASTER_PASSWORD='123456',    MASTER_LOG_FILE='master-bin.000003',    MASTER_LOG_POS=692;
  • 配置主数据库mysql_master

# MASTER_HOST:     从数据库服务名# MASTER_LOG_FILE: 日志文件名称# MASTER_LOG_POS:  日志文件当前位置mysql> CHANGE MASTER TO    MASTER_HOST='mysql_rep',    MASTER_USER='dev',    MASTER_PASSWORD='123456',    MASTER_LOG_FILE='rep-bin.000001',    MASTER_LOG_POS=155;
  1. 启动复制

  • 备数据库

mysql> start slave;
  • 主数据库

mysql> start slave;
  1. 查看数据库状态

mysql> show master status;mysql> show slave status;

看完上述内容,你们掌握Docker 中怎么实现MySQL主主复制的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注行业资讯频道,感谢各位的阅读!

数据 数据库 配置 文件 服务 日志 目录 密码 权限 用户 网络 中指 主机 位置 内容 文件名 方法 更多 状态 问题 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 aspice软件开发下载 湖南企薪社互联网科技有限公司 删除数据库下的表空间 网络安全手机版里面的字怎么写 电脑连接网络安全类型 嘉定市网络安全知识 我的世界基岩版台湾服务器 数据库连接工具使用 数据库表空间在哪个文件名 网页登录不了服务器 服务器的内存和硬盘区别 莆田鑫望软件开发服务中心 输入网络安全秘钥 史上最好玩的娱乐服务器 关于数据库系统的读书心得 山东c语言软件开发价位 数据库安全代码 iPhone怎么关闭网络安全警告 dna数据库在长沙哪 数据库创建查询的关键字是什么 剑网三怀旧服有哪些服务器 软件开发投标技术证明文件 网络技术犯罪的种类 数据库权限的适用场合 律师事务所网络安全宣传 苹果手机游戏服务器不同步 软件开发团队组织 物流运输软件开发公司排行 病症诊疗数据库er图 腾达路由器远端服务器没反应
0