MaxScale实现MySQL数据库代理(上篇)

563 阅读2分钟

持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第17天,点击查看活动详情

MariaDB MaxScale实现MySQL数据库代理(上篇)

前言

MaxScaleMariaDB 开发的一个数据库代理服务, 我们这里准备基于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状态.jpg 可以看到, 我们没有加任何配置, 默认开启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;

11.jpg

查看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;

222.jpg 如果show slave status查看的状态跟上图不太一致, 为connecting或者NO, 请检查容器之间网络是否通畅

测试 在master上创建一个test库, 然后刷新slave, 可以发现test库已经自动同步过去

CREATE DATABASE test;

image.png

至此, 我们的MySQL主从服务已经搭建好了, 下篇我们将开始搭建MaxScale服务完成数据库代理