ProxySQL實現mysql中間件讀寫分離

一、初始化準備,四臺設備mysql

master:192.168.2.6
slave:192.168.2.16
proxysql:192.168.2.26
Client:192.168.2.100,用於測試

二、搭建好主從服務器sql

master:主
[root@master ~]# yum -y install mariadb-server
[root@master ~]# vim /etc/my.cnf
[mysqld]
server_id=6
binlog_format=row
log_bin
skip_name_resolve
[root@master ~]# systemctl start mariadb
MariaDB [(none)]> grant replication slave on *.* to repluser@'192.168.2.%' identified by '123456';      #建立複製帳號

slave:從
[root@slave ~]# yum -y install mariadb-server
[root@slave ~]# vim /etc/my.cnf
[mysqld]
read-only
server_id=16
skip_name_resolve
binlog_format=row
[root@slave ~]# systemctl start mariadb
MariaDB [(none)]> CHANGE MASTER TO
    -> MASTER_HOST='192.168.2.6',
    ->   MASTER_USER='repluser',
    ->   MASTER_PASSWORD='123456',
    ->   MASTER_PORT=3306,
    ->   MASTER_LOG_FILE='mariadb-bin.000001',
    ->   MASTER_LOG_POS=245;
Query OK, 0 rows affected (0.02 sec)
MariaDB [(none)]> start slave;
MariaDB [(none)]> show slave status\G

三、測試主從同步是否正常數據庫

master:
MariaDB [(none)]> create database db1;

slave:
MariaDB [(none)]> show databases;

四、搭建proxysql yum倉庫vim

proxysql:
[root@proxysql ~]# cat <<EOF | tee /etc/yum.repos.d/proxysql.repo
> [proxysql_repo]
> name= ProxySQL YUM repository
> baseurl=http://repo.proxysql.com/ProxySQL/proxysql-1.4.x/centos/\$releasever
> gpgcheck=1
> gpgkey=http://repo.proxysql.com/ProxySQL/repo_pub_key
> EOF

五、安裝proxysql和mariadb客戶端工具centos

proxysql:       6032管理端口、  6033鏈接端口
[root@proxysql ~]# yum -y install proxysql mariadb
[root@proxysql ~]# rpm -ql proxysql     
[root@proxysql ~]# service proxysql start      #老的啓動方法
[root@proxysql ~]# ll /var/lib/proxysql/       #proxysql簡化版的關係型數據庫,用來存放proxysql配置

六、鏈接proxysql,在main. mysql_servers 加入主從服務器記錄bash

proxysql:
[root@proxysql ~]# mysql -uadmin -padmin -P6032 -h127.0.0.1     #帳號密碼默認admin
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.2.6',3306);                 #組id,ip,端口
MySQL [(none)]> insert into mysql_servers(hostgroup_id,hostname,port) values(10,'192.168.2.16',3306);
MySQL [(none)]> select * from mysql_servers;    #查看添加的記錄信息

七、主從服務器添加管理帳戶供proxysql機器來管理服務器

master:
MariaDB [(none)]> grant replication client on *.* to monitor@'192.168.2.%' identified by '123456';      #主從複製已經創建,只要在主服務器添加便可

八、設置使用monitor用戶鏈接主從服務器 #main.global_variables表app

proxysql:
MySQL [(none)]>  set mysql-monitor_username='monitor';  
MySQL [(none)]>  set mysql-monitor_password='123456';
MySQL [(none)]>  load mysql variables to runtime;       #加載生效
MySQL [(none)]> save mysql variables to disk;           #保存到磁盤

九、設置分組信息 #須要修改的是main庫中的mysql_replication_hostgroups表ide

proxysql:
MySQL [(none)]> insert into mysql_replication_hostgroups values(10,20,"test");      #10組負責寫,20負責讀
MySQL [(none)]> select * from mysql_replication_hostgroups;     #查看添加的記錄
MySQL [(none)]>  load mysql servers to runtime;     #加載生效
MySQL [(none)]> save mysql servers to disk;     #保存到磁盤
MySQL [(none)]> select * from mysql_servers;        #再次查看記錄,proxysql已經區分讀寫id了

十、在master節點建立訪問用戶,用於主從服務器去訪問中間件proxysql #主從複製已經創建,只要在主服務器添加便可工具

master:
MariaDB [(none)]> grant all on *.* to sqluser@'192.168.2.%' identified by '123456';

十一、將建立訪問調度器proxysql的客戶端用戶sqluser加入proxysql服務器的

mysql_users表中
proxysql:
MySQL [(none)]> insert into mysql_users(username,password,default_hostgroup) values('sqluser','123456',10);     #default_hostgroup默認
組設置爲寫組10,

MySQL [(none)]>  load mysql users to runtime;       #生效
MySQL [(none)]>  save mysql users to disk;      #存盤

十二、使用客戶端測試

Client:
[root@centos6 ~]# mysql -usqluser -p123456 -h192.168.2.26 -P6033 -e 'select @@server_id';

1三、設置調度規則

proxysql:
MySQL [(none)]>  insert into mysql_query_rules
    -> (rule_id,active,match_digest,destination_hostgroup,apply)VALUES
    -> (1,1,'^SELECT.*FOR UPDATE$',10,1),(2,1,'^SELECT',20,1);
Query OK, 2 rows affected (0.00 sec)  #讀調度到20組,寫調度到10組 

MySQL [(none)]>  load mysql query rules to runtime;     #生效

MySQL [(none)]>  save mysql query rules to disk;        #保存

1四、客戶端測試

Client:
[root@centos6 ~]# mysql -usqluser -p123456 -h192.168.2.26 -P6033 -e 'select @@server_id';
相關文章
相關標籤/搜索