在docker中布置mysql主从同步和读写分离
阅读原文时间:2021年04月25日阅读:1

一.安装mysql

方案一:

1.使用 docker pull mysql:lastest 下拉最新的mysql镜像;

2.使用docker run -itd --name xxx -e MYSQL_ROOT_PASSWORD=xxx mysql 启动3个mysql容器,分别命名为master,slave,proxy;

3.使用docker exec -it "container id" /bin/bash,进入容器内部,先使用apt-get update 更新软件库,再使用apt-get install vim 安装vim,以便编辑mysql的配置文件,配置文件位置 /etc/mysql;

方案二:

1.使用 docker pull mysql:lastest 下拉最新的mysql镜像;

2.使用docker run -d --name xxx -e MYSQL_ROOT_PASSWORD=xxx -v conf_local:conf_docker mysql 启动3个mysql容器,分别命名为master,slave,proxy;(-v 将本地目录映射到容器中,这样可以容器内可以使用本机的配置文件);

说明:mysql8.0跳过ssl验证 skip_ssl

使用native_password:default-authentication-plugin=mysql_native_password

创建远程用户:create user 'root'@'host' identified with mysql_native_password by 'new password'

二.配置主从同步

配置主数据库服务器(ip:172.17.0.2)

1.授权给从数据库服务器

grant replication slave on *.* to 'admin'@'172.17.0.3' identified by '123456';

2.查看主数据库状态,若未出现file,position值,请先开启binlog,然后重启mysql服务

show master status;

3.记录file和position的值,方便配置从数据库服务器使用,假定值为file_1,position_1

配置从数据库服务器(ip:172.17.0.3)

1.修改从数据库服务器的配置文件,添加server-id=xxx,确保server-id不被重用,重启服务器

2.在从数据库中执行以下命令:

change master to master_host ='172.17.0.2',master_user='admin',master_password ='123456',master_log_file ='file_1',master_log_pos =position_1;

3.执行start slave,开启同步进程。

4.主从同步检查 show slave status\G

判断主从同步成功的标志:Slave_IO_Running ,Slave_SQL_Running两个值为yes

三.配置读写分离

基于maxscale的读写分离配置(说明:mysql使用authentication_string,可能导致读写分离认证失败,需要使用旧的加密方式)

1.二进制安装maxscale,过程复杂略

参考文档:https://www.jianshu.com/p/772e17c10e08https://blog.51cto.com/lee90/1945504

2.使用docker安装maxscale,官方镜像地址mariadb/maxscale

版本说明:2.4版本的maxscale已放弃使用maxadmin,使用restful api+maxctrl监控服务器状态

3.读写分离配置说明

# MaxScale documentation:

# https://mariadb.com/kb/en/mariadb-maxscale-24/

# Global parameters

#

# Complete list of configuration options:

# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-maxscale-configuration-guide/

[maxscale]

threads=auto

admin_host=0.0.0.0  #此处为restful api监听需要,默认监听所有网段8989端口

ms_timestamp=1

log_info=1

# Server definitions

#

# Set the address of the server to the network

# address of a MariaDB server.

#

[server1]

type=server

address=172.18.0.3  #主数据库服务器,主要用于数据写入

port=3306

protocol=MariaDBBackend

[server2]

type=server

address=172.18.0.4#从数据库服务器,主要用于数据读取

port=3306

protocol=MariaDBBackend

# Monitor for the servers

#

# This will keep MaxScale aware of the state of the servers.

# MariaDB Monitor documentation:

# https://mariadb.com/kb/en/mariadb-maxscale-24-mariadb-monitor/

[MariaDB-Monitor]

type=monitor

module=mariadbmon

servers=server1,server2 #需要添加所有数据库服务器

user=root

password=*****#数据库的密码

monitor_interval=1000

detect_stale_master=true #当master数据库挂掉,使用slave数据库

# Service definitions

#

# Service Definition for a read-only service and

# a read/write splitting service.

#

# ReadConnRoute documentation:

# https://mariadb.com/kb/en/mariadb-maxscale-24-readconnroute/

#[Read-Only-Service] #此处定义只读服务

#type=service

#router=readconnroute

#servers=server1

#user=myuser

#password=mypwd

#router_options=slave

# ReadWriteSplit documentation:

# https://mariadb.com/kb/en/mariadb-maxscale-24-readwritesplit/

[Read-Write-Service]#此处定义读写分离服务

type=service

router=readwritesplit

servers=server1,server2

user=root

password=******#数据库的密码

enable_root_user=1#允许root用户登录

max_slave_connections=100%

max_slave_replication_lag=5

# Listener definitions for the services

#

# These listeners represent the ports the

# services will listen on.

#

#[Read-Only-Listener]#只读服务监听

#type=listener

#service=Read-Only-Service

#protocol=MariaDBClient

#port=4008

[Read-Write-Listener]#读写服务监听

type=listener

service=Read-Write-Service

protocol=MariaDBClient

port=4006

四、数据库备份

1.在maxscale 容器中安装mariadb-backup工具,官方maxscale容器是ubuntu,首先要确认mysql的版本,然后安装相应的分支。

      安装步骤如下:

      1)在容器中执行apt-get update 更新安装源

      2)apt-get install software-properties-common

      3)apt-key adv --recv-keys --keyserver hkp://keyserver.ubuntu.com:80 0xcbcb082a1bb943db

      4)add-apt-repository 'deb http://sfo1.mirrors.digitalocean.com/mariadb/repo/10.0/ubuntu trusty main',此处分支为mysql对应的分支

      5)apt-get install mariadb-backup

2.备份数据库,使用mariabackup --defaults-file='/etc/my.cnf' --backup --target-dir=/data/backup/backup --user xxx --password ******,书说明:命令参数依次为mysql 配置文件路径,备份命令,要备份到的目录,数据库用户,数据库密码,此处为root用户即可

3.恢复数据库,使用mariabackup --default-file='/etc/my.cnf' --copy-back --target-dir=/data/backup/backup ,可以自定义恢复数据的位置,说明,要清空恢复数据库的目录,所以先备份好原来的数据库存储目录里的数据,方便出错恢复。

4.给恢复的数据目录下的数据库赋权,步骤3的恢复目录位置为/var/lib/mysql,使用chown -R mysql:mysql /var/lib/mysql/即可

说明:当恢复数据库的版本和数据来源数据库的版本不一致时,可能导致数据库功能出现问题,先备份要恢复数据库的mysql和performance_schema数据库,等数据恢复完成,先重启mysql服务,然后删除数据库中的mysql和performance_schema数据库,再使用source语句导入备份的数据库即可。

五、结果验证

1.连接maxscale,执行select @@hostname,返回从数据库服务器的地址,证明读写分离已经完成。

2.使用maxctrl list servers 展示主从数据库服务器的运行状态,证明主从服务器运行正常。