【docker安装Mysql并配置主从复制】

Mysql主从复制

目的:

是为了后面naocs集群的服务配置做准备工作

准备工作

准备至少两台虚拟机或服务器,安装好了docker,找到他们的ip地址
【docker安装Mysql并配置主从复制】_第1张图片
【docker安装Mysql并配置主从复制】_第2张图片

后面操作都用xshell操作来代替

【docker安装Mysql并配置主从复制】_第3张图片

拉取并启动mysql镜像和容器
主机的命令为mysql01,对外端口用3310来连接
docker run -d -p 3310:3306 -v /home/mysql/node-1/config:/etc/mysql/ -v/home/mysql/node-1/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456  --name mysql01 mysql:5.7
从机的命名为mysql02,对外端口用3311来连接
docker run -d -p 3311:3306 -v /home/mysql/node-2/config:/etc/mysql/ -v/home/mysql/node-2/data:/var/lib/mysql  -e MYSQL_ROOT_PASSWORD=123456 --name mysql02 mysql:5.7
命令解释:

-d: 后台运行容器,并返回容器ID
-p 3311:3306 :将容器的3306端口映射到宿主机3310端口
-e MYSQL_ROOT_PASSWORD=123456 :配置数据库连接密码
-v /home/mysql/node-2/config:/etc/mysql/ :将配置文件夹挂载到宿主机
–name mysql01(02):将容器命名为 mysql01(02)

docker ps -a #查看全部容器(运行中加未运行的)分别查看mysql容器的状态

【docker安装Mysql并配置主从复制】_第4张图片

【docker安装Mysql并配置主从复制】_第5张图片

  都处于正常运行状态
下面用navicat连接两个数据库

都正常连接
【docker安装Mysql并配置主从复制】_第6张图片
在这里插入图片描述

开始主从复制的配置

之前我们启动的时候写了这句-v /home/mysql/node-1/config:/etc/mysql/,将mysql 的配置文件夹和主机的文件夹挂载起来的。
那么我们就可以直接在主机下的/home/mysql/node-1/config/编写配置文件了,
那么从机下的就是/home/mysql/node-2/config/编写配置文件了。

进入主机操作:
cd /home/mysql/node-1/config/
vim my.cnf
复制下面内容进去
[mysqld]
#修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server_id=1
#启用二进制日志
log-bin=mysql-bin

设置不要复制的数据库(可设置多个)

binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库 需要复制的主数据库名字,多个数据库的话,需要多行书写即可,不可逗号连接
binlog-do-db=testdb
#设置logbin格式
binlog_format=STATEMENT
然后esc-> :wq 保存

进入从机操作

cd /home/mysql/node-2/config/
vim my.cnf
复制下面的内容
[mysqld]
#从服务器唯一ID
server_id=2
#启用中继日志
relay-log=mysql-relay
然后esc-> :wq 保存

分别在主从机上,用命令docker restart mysql01 和 docker restart mysql02 重启mysql的容器

搭建主从复制

【docker安装Mysql并配置主从复制】_第7张图片

进入主机的mysql
docker exec -it mysql01 /bin/bash #进入容器
mysql -uroot -p123456 #连接mysql

主机上建立帐户并授权 slave
给从机授权,为了让从机能够和主机连接起来。
GRANT REPLICATION SLAVE ON . TO ‘slave’@‘%’ IDENTIFIED BY ‘123456’;
复制
在这里插入图片描述

查询master状态
show master status; #查询master的状态
在这里插入图片描述

把这里的File和Position记下来哈,等下在从机上要用到。
File: mysql-bin.000003
Position: 438
复制
Binlog_Do_DB:需要复制的数据库。
Binlog_Ignore_DB:不需要复制的数据库。
注意:此步骤后不要再操作主服务器MySQL,防止主服务器状态值变化
由此进入从机操作:
进入mysql02容器
docker exec -it mysql02 /bin/bash
mysql -uroot -p123456
输入命令
CHANGE MASTER TO MASTER_HOST=‘主机的ip地址’,MASTER_USER=‘slave’,MASTER_PASSWORD=‘123456’,MASTER_PORT=3310, MASTER_LOG_FILE=‘mysql-bin.000003’,MASTER_LOG_POS=438;
解释:
CHANGE MASTER TO MASTER_HOST=‘主机的IP地址’,
MASTER_USER=‘slave’(刚刚配置的用户名),
MASTER_PASSWORD=‘123456’(刚刚授权的密码),
master_port=主机开放的端口 我这里是3310端口,
MASTER_LOG_FILE=‘mysql-bin.具体数字’,MASTER_LOG_POS=具体值(之前的Position);
【docker安装Mysql并配置主从复制】_第8张图片

注意事项:如果在这里出现错误,先重置。执行完下面两条命令。
stop slave;
reset master;
复制
启动从服务器复制功能
start slave;

查看从服务器状态
show slave status\G
在这里插入图片描述
【docker安装Mysql并配置主从复制】_第9张图片

#下面两个参数都是Yes,则说明主从配置成功!
Slave_IO_Running: Yes
Slave_SQL_Running: Yes

测试,主机的testdb库都会及时同步过去

【docker安装Mysql并配置主从复制】_第10张图片

现在主库的表里没数据,添加一条
【docker安装Mysql并配置主从复制】_第11张图片

查看从库的数据,也存在了

到此一主一从的mysql主从复制就完成了。
【docker安装Mysql并配置主从复制】_第12张图片

mysql主从复制的优点:

1、数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据
2、性能大大提升:一主多从,不同用户从不同数据库读取,性能提升
3、扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用
4、负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

你可能感兴趣的:(docker,mysql,adb)