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

Mysql主从复制

目的:

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

准备工作

准备至少两台虚拟机或服务器,安装好了docker,找到他们的ip地址

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

拉取并启动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容器的状态
复制代码
  都处于正常运行状态
下面用navicat连接两个数据库

都正常连接

开始主从复制的配置

之前我们启动的时候写了这句-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的容器

搭建主从复制

进入主机的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);

注意事项:如果在这里出现错误,先重置。执行完下面两条命令。

stop slave;

reset master;

复制

启动从服务器复制功能

start slave;

查看从服务器状态

show slave status\G

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

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

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

现在主库的表里没数据,添加一条

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

到此一主一从的mysql主从复制就完成了。

mysql主从复制的优点:

1、数据更安全:做了数据冗余,不会因为单台服务器的宕机而丢失数据

2、性能大大提升:一主多从,不同用户从不同数据库读取,性能提升

3、扩展性更优:流量增大时,可以方便的增加从服务器,不影响系统使用

4、负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

相关推荐
limingade32 分钟前
ADB识别手机系统弹授权框-如何处理多重弹框叠加和重叠问题
adb·智能手机·android自动授权确认·安卓弹框授权·自动化点击android授权框
FREEDOM_X37 分钟前
系统调试——ADB 工具
adb
曼汐 .4 小时前
数据库管理与高可用-MySQL高可用
数据库·mysql
MickeyCV4 小时前
使用Docker部署MySQL&Redis容器与常见命令
redis·mysql·docker·容器·wsl·镜像
刘 大 望4 小时前
数据库-联合查询(内连接外连接),子查询,合并查询
java·数据库·sql·mysql
棠十一5 小时前
Rabbitmq
分布式·docker·rabbitmq
LiRuiJie6 小时前
深入剖析MySQL锁机制,多事务并发场景锁竞争
数据库·mysql
睡觉待开机6 小时前
0. MySQL在Centos 7环境安装
数据库·mysql·centos
藥瓿亭6 小时前
K8S认证|CKS题库+答案| 6. 创建 Secret
运维·ubuntu·docker·云原生·容器·kubernetes·cks
2302_809798326 小时前
【JavaWeb】Docker项目部署
java·运维·后端·青少年编程·docker·容器