mysql 主从同步 docker demo

本贴最后更新于 2714 天前,其中的信息可能已经时过境迁

主要介绍下 docker 下实现 mysql 主从同步的 demo

安装和启动 docker

本文不详细介绍这个的具体步骤了

// 拉取镜像 docker pull mysql

创建主从 mysql 服务器

// 创建 主mysql 容器 docker run -t --name mysql-master -p 3307:3306 -e MYSQL_ROOT_PASSWORD='123456' -d mysql // 创建 从mysql 容器 docker run -t --name mysql-slave -p 3308:3306 -e MYSQL_ROOT_PASSWORD='123456' -d mysql

添加配置文件

// 本地创建cnf // master.cnf [mysqld] log-bin=mysql-bin server_id=1 // slave.cnf [mysqld] server_id=2 // server_id 必须唯一

将配置文件传到容器里

docker cp master.cnf mysql-master:/etc/mysql/my.cnf docker cp slave.cnf mysql-slave:/etc/mysql/my.cnf # 重启两个容器,否则配置不会生效 docker restart [容器id]

配置主从 mysql

主 mysql

docker ps docker exec -it mysql-master mysql -uroot -p123456 # 创建一个用户 CREATE USER 'repl'@'%' IDENTIFIED BY '123456'; -- '%'意味着所有的终端都可以用这个用户登录 GRANT SELECT,REPLICATION SLAVE ON *.* TO 'repl'@'%'; -- SELECT权限是为了让repl可以读取到数据,生产环境建议创建另一个用户 # 此时可以看下,master 的状态了,正常情况下应该如下: show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000001 | 154 | | | | +------------------+----------+--------------+------------------+-------------------+

从 mysql

首先得看下主 mysql 的 ip

docker inspect [主mysql容器id]

配置从 mysql

mysql> CHANGE MASTER TO MASTER_HOST='[主mysql的ip]',MASTER_PORT=3306, MASTER_USER='repl', MASTER_PASSWORD='123456'; # ERROR 1794 (HY000): Slave is not configured or failed to initialize properly. You must at least set --server-id to enable either a master or a slave. Additional error messages can be found in the MySQL error log. # 出现上面的错误一般是server_id没配置对 # ERROR 3021 (HY000): This operation cannot be performed with a running slave io thread; run STOP SLAVE IO_THREAD FOR CHANNEL '' first. # 这个是需要先 stop slave; 才能更新 # 除上面的情况,应该可以正常启动; start slave; show slave status; ------------------------------ Slave_IO_State: Waiting for master to send event Master_Host: 172.17.0.2 Master_User: repl Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 154 Relay_Log_File: 4b58ca523145-relay-bin.000002 Relay_Log_Pos: 367 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes Slave_SQL_Running: Yes ------------------------------ # 这样表示成功了。等待同步中 # 注意有可能端口会配置错误,貌似不是 3307??? # 主库执行 create database binlog; # 就可以同步了~

over~

  • MySQL

    MySQL 是一个关系型数据库管理系统,由瑞典 MySQL AB 公司开发,目前属于 Oracle 公司。MySQL 是最流行的关系型数据库管理系统之一。

    693 引用 • 537 回帖
  • binlog
    4 引用 • 1 回帖
  • Docker

    Docker 是一个开源的应用容器引擎,让开发者可以打包他们的应用以及依赖包到一个可移植的容器中,然后发布到任何流行的操作系统上。容器完全使用沙箱机制,几乎没有性能开销,可以很容易地在机器和数据中心中运行。

    494 引用 • 928 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...