欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

MYSQL数据库proxysql配置,实现读写分离

程序员文章站 2022-03-31 09:29:39
我们用三个节点来做实验: node1节点:172.16.251.132 主节点 node2节点:172.15.252.32 从节点 node3节点:172.16.251.49...

我们用三个节点来做实验:
node1节点:172.16.251.132 主节点
node2节点:172.15.252.32 从节点
node3节点:172.16.251.49 配置proxysql
先配置主从复制:

node节点主节点:

#ntpdate 172.16.0.1 同步时间
#vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=1
log-bin=master-log
#systemctl start mariadb

node2节点从节点:

#ntpdate 172.16.0.1 同步时间
#vim /etc/my.cnf.d/server.cnf
[mysqld]
innodb_file_per_table=ON
skip_name_resolve=ON
server_id=11
relay_log=relay-log
read_only=ON
#systemctl start mariadb

接下来数据库授权:

node1节点:

#mysql
>grant replication client,replication slave on *.* to 'repluser'@'172.16.252.%' identified by 'replpass';
>grant ALL on *.* to 'myadmin'@'172.16.251.%' identified by 'mypass';  (授权一个用户便于实验检测读写分离)
>FLUSH PRIVILEGES;
>show master status;
+-------------------+----------+--------------+------------------+
| File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-log.000001 |      498 |              |                  |
+-------------------+----------+--------------+------------------+

node2节点:

#mysql
>change master to master_host='172.16.251.132',master_user='repluser',master_password='replpass',master_port=3306,master_log_file='master-log.000001',master_log_pos= 498;
>start slave;
>show slave status\G;
*************************** 1. row ***************************
               Slave_IO_State: Waiting for master to send event
                  Master_Host: 172.16.251.132
                  Master_User: repluser
                  Master_Port: 3306
                Connect_Retry: 60
              Master_Log_File: master-log.000003
          Read_Master_Log_Pos: 498
               Relay_Log_File: relay-log.000002
                Relay_Log_Pos: 530
        Relay_Master_Log_File: master-log.000003
             Slave_IO_Running: Yes
            Slave_SQL_Running: Yes
              Replicate_Do_DB: 
          Replicate_Ignore_DB: 
           Replicate_Do_Table: 
       Replicate_Ignore_Table: 
      Replicate_Wild_Do_Table: 
  Replicate_Wild_Ignore_Table: 
                   Last_Errno: 0
                   Last_Error: 
                 Skip_Counter: 0
          Exec_Master_Log_Pos: 498
              Relay_Log_Space: 818
              Until_Condition: None
               Until_Log_File: 
                Until_Log_Pos: 0
           Master_SSL_Allowed: No
           Master_SSL_CA_File: 
           Master_SSL_CA_Path: 
              Master_SSL_Cert: 
            Master_SSL_Cipher: 
               Master_SSL_Key: 
        Seconds_Behind_Master: 0
Master_SSL_Verify_Server_Cert: No
                Last_IO_Errno: 0
                Last_IO_Error: 
               Last_SQL_Errno: 0
               Last_SQL_Error: 
  Replicate_Ignore_Server_Ids: 
             Master_Server_Id: 1

node3节点上配置proxysql:

#lftp 172.16.0.1/pub    下载1.3.6-1版本的proxysql,也可以从网上直接下载
-->cd Sources/7.x86_64/proxysql/
-->mget proxysql-1.3.6-1-centos7.x86_64.rpm
#yum install ./proxysql-1.3.6-1-centos7.x86_64.rpm    安装
#vim /etc/proxysql.cnf    编辑配置文件
mysql_variables=
{
            ............
        interfaces="0.0.0.0:3306;/tmp/proxysql.sock"
        default_schema="base"
}
mysql_servers =
(
    {
        address = "172.16.251.132"
        port = 3306
        hostgroup = 0           
                status = "ONLINE"     
                weight = 1            
                compression = 0
    },
    {
        address = "172.16.252.32"
        port = 3306
        hostgroup = 1           
                status = "ONLINE"     
                weight = 1            
                compression = 0
    }

)

mysql_users:
(
        {
         username = "myadmin"
         password = "mypass"
         default_hostgroup = 0
         default_schema="base"
         active = 1
        }
)
mysql_replication_hostgroups=
(
        {
                writer_hostgroup=0 写组,组号为0的可写
                reader_hostgroup=1 读组,组号为1的可读
                comment="test repl 1"
       }
)
#systemctl start proxysql
#ss -tnl 查看端口,6032和3306端口监听了
# mysql -umyadmin -pmypass -h172.16.251.49
>USE base;
>CREATE TABLE tbl1 (id INT);
>SHOW TABLES;
+----------------+
| Tables_in_base |
+----------------+
| tbl11          |
+----------------+

node1节点上:

#mysql;
>USE base;
>SHOW TABLES;
+----------------+
| Tables_in_base |
+----------------+
| tbl11          |
+----------------+

node2节点上:

#mysql;
>USE base;
>SHOW TABLES;
+----------------+
| Tables_in_base |
+----------------+
| tbl11          |
+----------------+

对于node1和node2节点来说,node3对base数据库的任何操作都能查看;node1作为写组成员,对base数据库的写操作,node2和node3也都能看到;作为读组成员node2对base数据库的操作,node1和node3都不能查看到。(node1、node2是主从复制,node3是proxysql)