docker安装mysql主从复制

1.拉取MySQL镜像

docker pull mysql:5.7

2.master主服务器的搭建   

# 1. 创建 /mydata/mysql-master/conf 卷目录

mkdir -p /mydata/mysql-master/conf

# 2.新建主服务器容器实例3307

docker run -d -p 3307:3306 --privileged=true -v /mydata/mysql-master/log:/var/log/mysql -v /mydata/mysql-master/data:/var/lib/mysql -v /mydata/mysql-master/conf:/etc/mysql/conf.d -v /mydata/mysql-master/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root  --name mysql-master mysql:5.7


# 3.并新建my.cnf 

    cd /mydata/mysql-master/conf

    touch my.cnf
    
    vim my.cnf (配置文件内容在下面)


# 2.3修改完配置后重启master实例

    docker restart mysql-master

# 2.4 进去mysql-master容器
    
    docker exec -it mysql-master /bin/bash

    对mysql的一些操作如下:
        use mysql;
        update user set host='%' where user='root';
        Grant all privileges on root.* to 'root'@'%';  //执行两次
        alter user root identified with mysql_native_password by '123456';
        FLUSH PRIVILEGES;
        show variables like 'character%'; // 查看字符编码


# 2.5 master容器实例内创建数据同步用户
    
    // 创建用户名为 slave,后面从库需要连接到这个用户上,后面的密码和数据库密码没有关系
    CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
 
    // 授权表示可以从任意 ip 使用此用户名和密码连接到主数据库
    GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* to 'slave'@'%';
 
     // 刷新配置
     flush privileges;
 
    // 查看日志文件 这个可以不执行
    show master status;

   

my.cnf文件内容如下:

[client]
default_character_set=utf8

[mysql]
default-character-set=utf8mb4

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=101 
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能
log-bin=mall-mysql-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
## 设置编码
collation_server = utf8_general_ci
character_set_server = utf8
##解决 mysql 2059 错误,没有此问题的不加
default_authentication_plugin=mysql_native_password

 3. slave从服务器的搭建       

# 1. 创建 /mydata/mysql-slave/conf 卷目录

mkdir -p /mydata/mysql-slave/conf

# 2.新建主服务器容器实例3308

docker run -d -p 3308:3306 --privileged=true -v /mydata/mysql-slave/log:/var/log/mysql -v /mydata/mysql-slave/data:/var/lib/mysql -v /mydata/mysql-slave/conf:/etc/mysql/conf.d -v /mydata/mysql-slave/mysql-files:/var/lib/mysql-files -e MYSQL_ROOT_PASSWORD=root  --name mysql-slave mysql:5.7


# 3.并新建my.cnf 

    cd /mydata/mysql-slave/conf

    touch my.cnf
    
    vim my.cnf (配置文件内容在下面)


# 2.3修改完配置后重启slave实例

    docker restart mysql-slave

# 2.4 进去mysql-slave容器
    
    docker exec -it mysql-slave /bin/bash

mysql-slave的my.cn配置文件内容如下:

[client]
default_character_set=utf8

[mysql]
default-character-set=utf8mb4

[mysqld]
## 设置server_id,同一局域网中需要唯一
server_id=102
## 指定不需要同步的数据库名称
binlog-ignore-db=mysql  
## 开启二进制日志功能,以备Slave作为其它数据库实例的Master时使用
log-bin=mall-mysql-slave1-bin  
## 设置二进制日志使用内存大小(事务)
binlog_cache_size=1M  
## 设置使用的二进制日志格式(mixed,statement,row)
binlog_format=mixed  
## 二进制日志过期清理时间。默认值为0,表示不自动清理。
expire_logs_days=7  
## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062  
## relay_log配置中继日志
relay_log=mall-mysql-relay-bin  
## log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1  
## slave设置为只读(具有super权限的用户除外)
read_only=1
## 设置编码
collation_server = utf8_general_ci
character_set_server = utf8
##解决 mysql 2059 错误,没有此问题的不加
default_authentication_plugin=mysql_native_password

4.配置主从复制

      Master :
//进入主服务器查看状态

docker exec -it mysql-master /bin/bash

mysql -uroot -p 

show master status;

//查看端口

show global variables like 'port';



//查看容器内IP地址

cat /etc/hosts



//查看容器外IP地址

docker ps -a

docker inspect 容器名

SLAVE:

#从服务器操作:配置主从连接关系



change master to master_host='主机ip', master_user='slave', master_password='root', master_port=3307, master_log_file='主机信息获取', master_log_pos= 820, master_connect_retry=30;

其中:

CHANGE MASTER TO MASTER_HOST=’主机的IP地址’,

MASTER_USER=’slave'(刚刚配置的用户名),

MASTER_PASSWORD=’123456′(刚刚授权的密码),

Master_port=3310 (Master主机开放的端口,)

MASTER_LOG_FILE=’mysql-bin.具体数字’,MASTER_LOG_POS=具体值(之前的Position);

eg:

change master to master_host='192.168.101.65', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000001', master_log_pos= 934, master_connect_retry=30;



//开启主从复制,查看从数据库状态

show slave status \G;



// 开启主从同步

start slave;



//停止主从同步

stop slave;

主从复制验证:
master:

docker exec -it mysql-master /bin/bash
mysql -uroot -p 
create database testdb;
slave:

docker exec -it mysql-slave /bin/bash
mysql -uroot -p
show databases;如果存在testdb,说明成功了

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值