这里通过ProxySQL实现一个简单的读写分离功能示例,以便快速入门。即使是快速入门,需要配置的内容也很多,包括:后端MySQL的配置、监控配置、发送SQL语句的用户、SQL语句的路由规则。所以,真的想要实现一个ProxySQL+MySQL,即使只实现最基本的功能,步骤也是挺多的,不过配置的逻辑都很简单。
实验环境:
角色 主机IP server_id 数据状态Proxysql 192.168.100.21 null 无
Master 192.168.100.22 110 刚安装的全新MySQL实例
Slave1 192.168.100.23 120 刚安装的全新MySQL实例
Slave2 192.168.100.24 130 刚安装的全新MySQL实例
为了演示完整的过程,这里把后端MySQL主从复制的基本配置步骤也列出来了。如了解配置过程,可跳过主从配置的部分。
注意点:slave节点需要设置read_only=1。如果后端是PXC/MGR/MariaDB Galera,则无需手动设置,因为会自动设置。
1.1 配置后端的主从复制提供3个MySQL节点的配置文件。
# 以下是Master的配置文件 [mysqld] datadir=http://www.likecs.com/data socket=http://www.likecs.com/data/mysql.sock server-id=110 log-bin=http://www.likecs.com/data/master-bin sync-binlog=1 log-error=http://www.likecs.com/data/error.log pid-file=http://www.likecs.com/data/mysqld.pid # 以下是slave1的配置文件 [mysqld] datadir=http://www.likecs.com/data socket=http://www.likecs.com/data/mysql.sock server-id=120 relay_log=http://www.likecs.com/data/relay-log log-error=http://www.likecs.com/data/error.log pid-file=http://www.likecs.com/data/mysqld.pid read_only=1 # 以下是slave2的配置文件 [mysqld] datadir=http://www.likecs.com/data socket=http://www.likecs.com/data/mysql.sock server-id=130 relay_log=http://www.likecs.com/data/relay-log log-error=http://www.likecs.com/data/error.log pid-file=http://www.likecs.com/data/mysqld.pid read_only=1为3个MySQL节点提供数据目录/data
mkdir /data chown -R mysql.mysql /data初始化三个MySQL节点。
mysqld --initialize-insecure --user=mysql --datadir=http://www.likecs.com/data启动3个MySQL节点的mysqld服务。
systemctl start mysqld连上master,修改root密码,创建用于复制的用户repl。
# 以下在master上执行 mysql> alter user root@localhost identified by 'P@ssword1!'; mysql> create user repl@'192.168.100.%' identified by 'P@ssword1!'; mysql> grant replication slave on *.* to repl@'192.168.100.%';连上两个slave,开启复制线程。
# 以下在两个slave节点上都执行 change master to master_host='192.168.100.22', master_user='repl', master_password='P@ssword1!', master_port=3306, master_log_file='master-bin.000001', master_log_pos=4; start slave;如此配置之后,3个MySQL节点就保持了同步。
1.2 向ProxySQL中添加MySQL节点首先启动ProxySQL。
service proxysql start启动后会监听两个端口,默认为6032和6033。6032端口是ProxySQL的管理端口,6033是ProxySQL对外提供服务的端口。
[root@s1 ~]# netstat -tnlp Active Internet connections (only servers) Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name tcp 0 0 0.0.0.0:6032 0.0.0.0:* LISTEN 1231/proxysql tcp 0 0 0.0.0.0:6033 0.0.0.0:* LISTEN 1231/proxysql tcp 0 0 0.0.0.0:22 0.0.0.0:* LISTEN 1152/sshd tcp 0 0 127.0.0.1:25 0.0.0.0:* LISTEN 2151/master tcp6 0 0 :::22 :::* LISTEN 1152/sshd tcp6 0 0 ::1:25 :::* LISTEN 2151/master然后使用mysql客户端连接到ProxySQL的管理接口(admin interface),该接口的默认管理员用户和密码都是admin。
[root@s1 ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1 --prompt 'admin> '我这里重新设置了提示符。
admin> show databases; +-----+---------------+-------------------------------------+ | seq | name | file | +-----+---------------+-------------------------------------+ | 0 | main | | | 2 | disk | /var/lib/proxysql/proxysql.db | | 3 | stats | | | 4 | monitor | | | 5 | stats_history | /var/lib/proxysql/proxysql_stats.db | +-----+---------------+-------------------------------------+ 5 rows in set (0.00 sec)ProxySQL提供了几个库,每个库都有各自的意义。本文只是快速入门文章,不会详细介绍每个库中的每个表以及每个字段,不过在接下来的文章中,我会详细介绍到每个字段,因为每个字段都重要。