mysql 主从同步 docker demo

  |   1 评论   |   284 浏览

主要介绍下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~

评论

发表评论

validate