Mysql主从互备环境搭建

一、环境准备和部署架构

主从复制,是用来建立一个和主数据库完全一样的数据库环境,主数据库一般是准实时的业务数据库,主从复制的作用如下:

l 做数据的热备,作为后备数据库,主数据库服务器故障后,可切换到从数据库继续工作,避免数据丢失。

l 架构的扩展。业务量越来越大,I/O访问频率过高,单机无法满足,此时做多库的存储,降低磁盘I/O访问的频率,提高单个机器的I/O性能。

l 读写分离,使数据库能支持更大的并发。

规划:

l 服务器操作系统为centos7.9,为最小化安装。

l 主机A和主机B均关闭防火墙和SELINUX 。

l IP地址分别为192.168.10.62和192.168.10.63.

l MySQL版本为 mysql:8.0 ,为Docker镜像安装。

 

 Mysql主从互备环境搭建_mysql

 

 

 

 

 

二、安装mysql

2.1、安装docker

l Docker 要求 CentOS 系统的内核版本高于 3.10 ,通过 uname -r 命令查看你当前的内核版本。

     Mysql主从互备环境搭建_mysql_02

 

 

l 使用 root 权限登录 Centos。确保 yum 包更新到最新。

yum update

l 卸载旧版本(如果安装过旧版本的话)

yum remove docker  docker-common docker-selinux docker-engine

l 安装需要的软件包, yum-util 提供yum-config-manager功能,另外两个是devicemapper驱动依赖的

 yum install -y yum-utils device-mapper-persistent-data lvm2

l 设置yum源

yum-config-manager --add-repo ​​https://download.docker.com/linux/centos/docker-ce.repo​

l 可以查看所有仓库中所有docker版本,并选择特定版本安装

yum list docker-ce --showduplicates | sort -r

l 安装docker

 yum install docker-ce-18.03.1.ce-1.el7.centos  docker-ce-cli-1:20.10.8-3.el7  containerd.io

l 启动并加入开机启动

systemctl start docker

systemctl enable docker

l 验证安装是否成功(有client和service两部分表示docker安装启动都成功了)

docker version

2.2、安装mysql8.0

2.2.1、主mysql  192.168.10.62

l 拉取镜像:

docker pull mysql:8.0

l 创建容器:

docker run --restart=always --privileged=true -p 3306:3306 --name mysqlmaster -e MYSQL_ROOT_PASSWORD=password123 -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/conf:/etc/mysql/conf.d  -v /docker/mysql/data:/var/lib/mysql  -d mysql:8.0

 

2.2.2、从mysql  192.168.10.63

l 拉取镜像

 docker pull mysql:8.0

l 创建容器:

 docker run --restart=always --privileged=true -p 3306:3306 --name mysqlslave -e MYSQL_ROOT_PASSWORD=password123 -v /docker/mysql/log:/var/log/mysql -v /docker/mysql/conf:/etc/mysql/conf.d  -v /docker/mysql/data:/var/lib/mysql  -d mysql:8.0

 

l 修改主从配置:参考命令

docker cp 本地路径/my.cnf mysql:/etc/mysql,将本地文件替换掉mysql容器里面的文件

      

2.2.3、远程访问授权

    use mysql;

ALTER USER 'root'@'%' IDENTIFIED BY 'password123' PASSWORD EXPIRE NEVER;

ALTER USER 'root'@'%' IDENTIFIED with mysql_native_password by 'password123';

flush privileges;

2.3、配置mysql主从复制

2.3.1、主从复制---Master主机上执行以下步骤

1、配置my.cnf

 Mysql主从互备环境搭建_主从复制_03

 

 

2、创建备机链接主机的账号  授权

 

  Mysql主从互备环境搭建_centos_04

 

 Mysql主从互备环境搭建_docker_05

 

 

2.3.2、开启主从同步 从机上执行

 

 1、my.cnf 添加

server-id=63 ​

innodb_flush_log_at_trx_commit=2

sync_binlog=1

log-bin=mysql-bin-63

三、配置mysql主从关系

3.1、在从(Slave)节点的mysql执行以下命令:

mysql> CHANGE MASTER TO

MASTER_HOST='192.168.10.62',

MASTER_USER='repl',

MASTER_PASSWORD='password123',

MASTER_LOG_FILE='mysql-bin-200.000010',

MASTER_LOG_POS=156;

3.2、开启复制监听

  start slave;

3.3、检查状态

   show slave status  \G

   确保以下参数是yes

   Slave_IO_Running: Yes

       Slave_SQL_Running: Yes

 

 Mysql主从互备环境搭建_mysql_06

 

 

 

 

3.4、复制关系问题修复:

1、检查mysql的service_id

   show  variables like 'server_id';

2、修改从链接主的配置信息

   stop slave;

       CHANGE MASTER TO  MASTER_HOST='192.168.10.62';

   CHANGE MASTER TO MASTER_USER='repl';

   CHANGE MASTER TO MASTER_PASSWORD='password123';

#来自主机的show master

  CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin-200.000010';  

 #来自主机的show master

       CHANGE MASTER TO MASTER_LOG_POS=156;    start slave;

   show slave stauts \G;

四、主从复制测试

l Master 库中创建表 test-replication

 Mysql主从互备环境搭建_docker_07

 

 

 

 

l slave库中显示结果

 Mysql主从互备环境搭建_数据库_08

 

 

五、参考

  5.1:docker:​​https://www.runoob.com/docker/centos-docker-install.html​

  5.2:docker hub:https://hub.docker.com/