持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情
MariaDB MaxScale实现MySQL数据库代理(上篇)
前言
MaxScale 是 MariaDB 开发的一个数据库代理服务,
我们这里准备基于MaxScale实现MySQL读写分离功能
环境
- MySQL8.0.25 主从
- MaxScale 2.5.20-GA
准备
需要准备好MySQL主从服务, 这里为了简单, 我们使用Docker方式快速搭建起MySQL主从服务,
注意生产环境不要使用Docker方式搭建数据库
创建相关文件夹
cd /home && mkdir mysqlcluster && cd mysqlcluster && mkdir master-conf slave-conf
创建配置文件
# 主, 从
# 服务id, 保证唯一
cat >> master-conf/my.cnf << EOF
[mysqld]
server-id=1
gtid_mode=ON
enforce-gtid-consistency=true
EOF
cat >> slave-conf/my.cnf << EOF
[mysqld]
server-id=2
gtid_mode=ON
enforce-gtid-consistency=true
EOF
启动主从服务
这里为了简单, 我们只挂载了配置文件, logs和data挂载同理
pwd
docker run --name mysqlmaster -v $PWD/master-conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3307:3306 mysql:8.0.25
docker run --name mysqlslave -v $PWD/slave-conf:/etc/mysql/conf.d -e MYSQL_ROOT_PASSWORD=123456 -d -i -p 3308:3306 mysql:8.0.25
这时候已经可以直接使用Navicat连接数据库了, 注意如果有防火墙的别忘记开端口了
查看binlog开启状态
可以看到, 我们没有加任何配置, 默认开启
binlog日志, 并以ROW格式记录(记录每一行数据变更细节)
SHOW VARIABLES WHERE variable_name IN ( 'log_bin', 'binlog_format' );
创建用户
- 连接master, 执行以下操作
创建用户并授权
CREATE USER 'maxscale'@'%' IDENTIFIED WITH mysql_native_password BY '123456';
GRANT ALL PRIVILEGES ON *.* TO 'maxscale'@'%';
flush privileges;
查看master binlog信息 这里需要记住当前master的binlog文件名称和文件读取位置, 下面操作需要使用到
show master status;
查看master的容器ip
docker inspect --format='{{.NetworkSettings.IPAddress}}' mysqlmaster
- 连接slave, 执行以下操作
开启同步服务
-- master地址, 注意这里是容器的ip
CHANGE MASTER TO master_host = '172.17.0.2',
-- 数据库端口, 注意这里是docker容器内部端口
master_port = 3306,
-- 账号
master_user = 'maxscale',
-- 密码
master_password = '123456',
-- 起始文件名称
master_log_file = 'binlog.000002',
-- 起始位置
master_log_pos = 1304,
master_connect_retry = 30;
-- 刷新
flush privileges;
-- 开启
start slave;
-- 查看状态
show slave status;
如果
show slave status查看的状态跟上图不太一致, 为connecting或者NO, 请检查容器之间网络是否通畅
测试 在master上创建一个
test库, 然后刷新slave, 可以发现test库已经自动同步过去
CREATE DATABASE test;
至此, 我们的MySQL主从服务已经搭建好了, 下篇我们将开始搭建MaxScale服务完成数据库代理