mysql高级篇-docker mysql主从

mysql高级篇-docker mysql主从搭建

一、docker环境准备

1、VM安装centos-7

安装详情见https://blog.csdn.net/chaojiangroke/article/details/108660782

 

2、安装centos-7版docker

安装详细见https://blog.csdn.net/chaojiangroke/article/details/108666791

 

3、为mysql主从自定义网段

docker network create --subnet=172.18.0.0/16 net-mysql

二、mysql主从(一主一从)

1、下载redis镜像

docker pull mysql:version

 

2、查看镜像

docker images

 

3、创建mysql的映射目录

进入要创建映射目录的位置

cd /home/docker

 

创建主数据库的映射主目录

mkdir mysql-master

进入主数据库的映射主目录

cd mysql-master

创建主数据库的配置文件映射目录

mkdir conf

将准备好的配置文件mysql.cnf  docker.cnf  mysqldump.cnf拷贝到该目录下

文件保存在网盘

链接:https://pan.baidu.com/s/1g47PAUB-sSf09QkctyTY7w 
提取码:aaaa 

在docker.cnf目录下添加以下配置

## 设置server_id,注意要唯一

server-id=1

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=mysql-bin

 

进入要创建映射目录的位置

cd /home/docker

创建从数据库的映射主目录

mkdir mysql-slave

进入从数据库的映射主目录

cd mysql- slave

创建主数据库的配置文件映射目录

mkdir conf

将准备好的配置文件mysql.cnf  docker.cnf  mysqldump.cnf拷贝到该目录下

文件保存在网盘

链接:https://pan.baidu.com/s/1g47PAUB-sSf09QkctyTY7w 
提取码:aaaa 

在docker.cnf目录下添加以下配置

## 设置server_id,注意要唯一

server-id=2

## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

log-bin=mysql-bin  

## relay_log配置中继日志

relay_log=edu-mysql-relay-bin

 

4、运行mysql镜像生成相应的容器

主服务器:

docker run -p 3307:3306 --name mysql-master --restart=always -v /home/docker/mysql-master/conf:/etc/mysql/conf.d -v /home/docker/mysql- master/logs:/logs -v /home/docker/mysql-master/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 –net net-mysql –ip 172.17.0.2 -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1

 

从服务器:

docker run -p 3308:3306 --name mysql-slave --restart=always -v /home/docker/mysql-slave/conf:/etc/mysql/conf.d -v /home/docker/mysql- slave/logs:/logs -v /home/docker/mysql-slave/data:/var/lib/mysql -v /etc/localtime:/etc/localtime:ro -e MYSQL_ROOT_PASSWORD=123456 –net net-mysql –ip 172.17.0.2 -d mysql:latest --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci --lower_case_table_names=1

 

 

启动后进入master

查看主从信息

#进入容器

mysql> [root@localhost ~]# docker exec -ti mysql-master /bin/bash

root@30d5b22e4f60:/# mysql -uroot -p123456

mysql> show master status;

+------------------+----------+--------------+------------------+-------------------+

| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

+------------------+----------+--------------+------------------+-------------------+

| mysql-bin.000003 |      156 |              |                  |                   |

+------------------+----------+--------------+------------------+-------------------+

1 row in set (0.00 sec)

 

File和Position字段的值后面将会用到,在后面的操作完成之前,需要保证Master库不能做任何操作,否则将会引起状态变化,File和Position字段的值变化。

在Slave 中进入 mysql,执行change master to master_host='172.17.0.2', master_user='slave', master_password='123456', master_port=3306, master_log_file='mysql-bin.000001', master_log_pos= 2830, master_connect_retry=30;

命令说明:

master_host :Master的地址,指的是容器的独立ip,可以通过docker inspect --format='{{.NetworkSettings.IPAddress}}' 容器名称|容器id查询容器的ip

 

master_port:Master的端口号,指的是容器的端口号

master_user:用于数据同步的用户

master_password:用于同步的用户的密码

master_log_file:指定 Slave 从哪个日志文件开始复制数据,即上文中提到的 File 字段的值

master_log_pos:从哪个 Position 开始读,即上文中提到的 Position 字段的值

master_connect_retry:如果连接失败,重试的时间间隔,单位是秒,默认是60秒

在Slave 中的mysql终端执行show slave status \G;用于查看主从同步状态。

 

正常情况下,SlaveIORunning 和 SlaveSQLRunning 都是No,因为我们还没有开启主从复制过程。使用start slave开启主从复制过程,然后再次查询主从同步状态show slave status \G;。

 

SlaveIORunning 和 SlaveSQLRunning 都是Yes,说明主从复制已经开启。此时可以测试数据同步是否成功。

主从复制排错:

使用start slave开启主从复制过程后,如果SlaveIORunning一直是Connecting,则说明主从复制一直处于连接状态,这种情况一般是下面几种原因造成的,我们可以根据 Last_IO_Error提示予以排除。

  1. 网络不通

检查ip,端口

  1. 密码不对

检查是否创建用于同步的用户和用户密码是否正确

  1. pos不对

检查Master的 Position

 

本次我遇到的错误

 

我用了宿主机的映射端口,应该内网环境下用实际主数据库的端口3306

 

这个错误事版本涉及到的权限问题,处理方法如下

  1. // 修改加密规则
  2. ALTER USER 'root'@'localhost' IDENTIFIED BY 'password' PASSWORD EXPIRE NEVER;
  3. // 更新一下用户的密码
  4. ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'password';
  5. // 刷新权限
  6. FLUSH PRIVILEGES;
  7. // 最后重置下密码:
  8. alter user 'root'@'localhost' identified by '123456';

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值