mysql 主从同步 docker demo

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

主要介绍下 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 是最流行的关系型数据库管理系统之一。

    690 引用 • 535 回帖
  • binlog
    4 引用 • 1 回帖
  • Docker

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

    491 引用 • 917 回帖

相关帖子

欢迎来到这里!

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

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