【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、负载均衡:一主多从相当于分担了主机任务,做了负载均衡。

相关推荐
Narutolxy1 小时前
Ubuntu 下 Docker 企业级运维指南:核心命令与最佳实践深度解析20250309
运维·ubuntu·docker
夏炎正好眠2 小时前
mysql练习
数据库·mysql
Yuanymoon3 小时前
【由技及道】镜像星门开启:Harbor镜像推送的量子跃迁艺术【人工智障AI2077的开发日志010】
java·docker·jenkins·harbor·devops
驜鸈4 小时前
MySQL 的EXPLAIN 计划 type 字段详细说明
android·数据库·mysql
dleei5 小时前
使用docker创建gitlab仓库
前端·docker·gitlab
嗨起飞了5 小时前
MySQL入门手册
数据库·mysql
程序员的世界你不懂6 小时前
Mysql配置文件My.cnf(my.ini)配置参数说明
数据库·mysql·百度·新浪微博
ChinaRainbowSea6 小时前
MySQL 索引的数据结构(详细说明)
java·数据结构·数据库·后端·mysql
追风赶月、6 小时前
【MySQL】事务(隔离性、MVCC)
数据库·mysql
Lemon_man_7 小时前
基于Django创建一个WEB后端框架(DjangoRestFramework+MySQL)流程
python·mysql·django