方案一:
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/772e17c10e08,https://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 展示主从数据库服务器的运行状态,证明主从服务器运行正常。