使用docker完成mysql集群搭建,实现主从复制
视频讲解
准备两台MySql,使用docker,需要开启两个MySql容器。
docker常用命令:
一、镜像相关
二、DockerFile
三、容器相关
首先看到docker中已经安装好mysql并且该没有处于运行状态。
使用命令(使用时把换行符删掉):
docker run -p 12345:3306 --name mysql_master
-v /docker/mysql_master/conf:/etc/mysql/conf.d
-v /docker/mysql_master/logs:/logs
-v /docker/mysql_master/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
创建一个主服务器,mysql_master是服务器名字,其中12345为自己设置的端口号,3306为所映射到的端口号。
另外再创建一个从服务器,更改端口号和名字即可:
docker run -p 12346:3306 --name mysql_from
-v /docker/mysql_from/conf:/etc/mysql/conf.d
-v /docker/mysql_from/logs:/logs
-v /docker/mysql_from/data:/var/lib/mysql
-e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7
进入 conf目录:
cd docker/mysql_master/conf
vim my.cnf
将以下内容写入后并保存:
[mysqld]
## 同一局域网内注意要唯一
server-id=1
## 开启二进制日志功能,可以随便取(关键)
log-bin=mysql-bin
确保在主服务器上 skip_networking 选项处于 OFF 关闭状态, 这是默认值。如果是启用的,则从站无法与主站通信,并且复制失败。
步骤: 进入mysql后输入命令show variables like '%skip_networking%';
在mysql中admin用户包含所有权限,由于只用到了可以复制的权限,因此创建一个用户名叫repel的用户,并为他提供REPLICATION(可复制)的权限,命令如下:
CREATE USER 'repl'@'%' identified by '123456';
GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';
[mysqld]
server-id=2
在从服务器配置连接到主服务器的相关信息 (在容器里面的mysql执行)
mysql> CHANGE MASTER TO MASTER_HOST='xxxxx', MASTER_PORT=3306,MASTER_USER='repl',MASTER_PASSWORD='123456';
上面代码的xxxxx你需要换成你的IP,docker 查看容器 IP 的命令如下:
docker inspect --format=’{{.NetworkSettings.IPAddress}}’ 容器名称/容器id
启动的那个从服务器的线程
mysql> start slave;
Query OK, 0 rows affected (0.00 sec)
如果想实现一主多从,按照上边的步骤再添加一个从服务器即可
如果你上面的主从复制搞定了,那么这个主主复制就很简单了。我们把上面的从服务器也改成主服务器
1、修改上面的从服务器的my.cnf文件,和主服务器的一样(注意这个server-id不能一样)然后重启服务器
2、在从服务器里面创建一个复制用户创建命令(2.4中的步骤)(这里修改一下用户名可以改为 repl2)
3、在之前的主服务器里面运行下面这个代码
CHANGE MASTER TO MASTER_HOST='xxxx', MASTER_PORT=3306,MASTER_USER='repl2',MASTER_PASSWORD='123456';
start slave;
在主服务器上的所有操作(创建库,修改表之类)会被备份到从服务器上,但是在从服务器上的操作不会进入到主服务器中。