宝塔+docker实现mysql 主从复制

一、首先要在docker上面拉取mysql镜像【加粗字体都是关键】

   docker pull mysql:5.7

  查看镜像是否拉取成功

   docker images

创建两个mysql容器(举例:宝塔要放行端口,我这里是3339和3340)

docker run -p 3339:3306 --name mysql_master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

docker run -p 3340:3306 --name mysql_slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7

查看容器是否创建成功

docker ps

二、通过Navicat连接(如果没连接上,可以看一下端口是否放行)

两个数据库连接完以后,先进入到主容器中

docker exec -it mysql_master /bin/bash

cd切换到/etc/mysql目录下

cd /etc/mysql

通过vim my.cnf对my.cnf进行编辑,基本情况下是没有安装vim的,这里需要先按照一下vim,如果没有安装vim就会出现以下这种情况,不要担心,安装一下就好了。

通过yum install vim 安装我们的vim(下面会出现一个选择y/n)选择y安装,直接回车无效

yum install vim

vim my.cnf

安装完vim以后对my.cnf进行编辑

[mysqld]

server-id=100

log-bin=mysql-bin

将以上配置粘贴进去,保存退出

编辑完以后不要着急退出,进入mysql_master内的mysql

mysql  -uroot  -p123456

创建一个用户 (我创建用户为slave 密码为123456,这个可以自行设置),授予用户 slave REPLICATION SLAVE权限和REPLICATION CLIENT权限,用于在主从库之间同步数据,进行一下两步操作

创建slave用户,设置密码

CREATE USER 'slave'@'%' IDENTIFIED BY '123456';

授予复制权限

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';

刷新权限

FLUSH PRIVILEGES;

退出容器使用exit

重启一下容器

docker restart 容器的id/名称

mysql_master的里面配置基本完成,exit(退出)到根目录就行。

跟mysql_master一样的操作,进入到从(mysql_slave)的容器里

docker exec -it mysql_slave/bin/bash

cd到/etc/mysql目录下

cd /etc/mysql

继续安装一下vim

yum install vim

安装完vim以后对my.cnf进行编辑

vim my.cnf

编辑内容,(注意:slave里面的server-id的值是一定是大于master里面server-id的值)

[mysqld]

server-id=101

log-bin=mysql-slave-bin

relay_log=edu-mysql-relay-bin

编辑完以后保存退出

重启一下容器

docker restart 容器id/名称

在(mysql_slave) 中进入 mysql,执行下面的操作

运行show master status;命令看一下mysql_master状态,记住file和posilion两个值

show master status;

在(mysql_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= 2253, master_connect_retry=30;

master_host='172.17.0.2'为我们主(mysql_master)的容器ip

master_user='slave'(我们创建的用户名)

master_password='123456'(用户的密码)

master_port=3306(因为我们的创建的mysql容器端口是继承3306端口的,所以我们在这里写3306端口而不是主(mysql_master)的端口号)

master_log_file='mysql-bin.000001'(我们在主(mysql_master)里面获取到的File)

master_log_pos= 2253 (我们在主(mysql_master)里面获取到的Position)

master_connect_retry=30(时间隔)

紧接着执行show slave status \G;用于查看主从同步状态

show slave status \G;

现在的情况是两个NO,属于正常操作然,后我们运行start slave;

start slave;

然后再次查询主从同步状态show slave status \G;

show slave status \G;

如果出现SlaveIORunning 和 SlaveSQLRunning 都是Yes两个都是yes就证明我们的主从配置设置好了

在master新建数据库xxxx可以尝试着看一下效果,如果出现无法创建数据库的报错,需要自己去修改对应的用户权限。

使用Navicat远程连接mysql报错:1044 -Access denied for user ‘root‘@‘%‘ to database

报错是因为master用户没有权限的原因,找到一下两种解决办法:

1.修改权限

mysql> SELECT host,user,Grant_priv,Super_priv FROM mysql.user;
+-----------+---------------+------------+------------+
| host      | user          | Grant_priv | Super_priv |
+-----------+---------------+------------+------------+
| localhost | root          | Y          | Y          |
| localhost | mysql.session | N          | Y          |
| localhost | mysql.sys     | N          | N          |
| %         | root          | Y          | Y          |

| %         | master       | N         | N         |
| localhost | mysqladmin    | Y          | Y          |
+-----------+---------------+------------+------------+
5 rows in set (0.00 sec)

查询用户表看root用户权限

SELECT host,user,Grant_priv,Super_priv FROM mysql.user;

修改权限,命令如下:

use mysql;

UPDATE mysql.user SET Grant_priv='Y', Super_priv='Y' WHERE User='master';

FLUSH PRIVILEGES;

exit

以上操作执行完以后要是还不行给master赋所有用户权限,总结命令如下:

use mysql;
update user set host='%' where user='root';
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%';

重启docker容器

systemctl restart docker
重启MySQL容器

service mysqld restart

以上主从复制算完成了

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值