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

MySQL运维从入门到跑路之读写分离

程序员文章站 2022-04-10 12:37:54
...

MyCAT读写分离

Mycat 是一个开源的数据库系统,但是由于真正的数据库需要存储引擎,而 Mycat 并没有存储引擎,所以并不是完全意义的数据库系统。 那么 Mycat 是什么?Mycat 是数据库中间件,就是介于数据库与应用之间,进行数据处理与交互的中间服务。

MyCAT 是使用 JAVA 语言进行编写开发,使用前需要先安装 JAVA 运行环境(JRE),由于 MyCAT 中使用了 JDK7 中的一些特性,所以要求必须在 JDK7 以上的版本上运行。

实验环境:
数据库 mysql 5.7 或 mariadb 5.5 版本 2台 1G
数据库中间件 mycat 需要 1台 2G

第一步

设置域名解析(所有测试的机器)

[aaa@qq.com ~]# vim /etc/hosts
172.17.209.180  mysql-master
172.17.209.178  mysql-slave
172.17.209.179  mycat

第二步

安装jdk,部署Java环境

[aaa@qq.com mycathuanjing]# ls
jdk-8u211-linux-x64.tar.gz  Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
[aaa@qq.com mycathuanjing]# tar -xf jdk-8u211-linux-x64.tar.gz -C /usr/local/
[aaa@qq.com mycathuanjing]# mv /usr/local/jdk1.8.0_211/ /usr/local/java
[aaa@qq.com mycathuanjing]# vim /etc/profile.d/java.sh

配置环境变量

[aaa@qq.com mycathuanjing]# vim /etc/profile.d/java.sh
export JAVA_HOME=/usr/local/java
export PATH=$JAVA_HOME/bin:$PATH
export CLASSPATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar

[aaa@qq.com mycathuanjing]# source /etc/profile.d/java.sh

第三步

部署mycat服务器

下载
[aaa@qq.com ~]# wget http://dl.mycat.io/1.6.5/Mycat-server-1.6.5-release-20180122220033-linux.tar.gz
解压
[aaa@qq.com ~]# tar xf Mycat-server-1.6.5-release-20180122220033-linux.tar.gz -C /usr/local

配置mycat

MyCAT 目前主要通过配置文件的方式来定义逻辑库和相关配置:

/usr/local/mycat/conf/server.xml           定义用户以及系统相关变量,如端口等。其中用户信息是前端应用程序连接 mycat 的用户信息。
/usr/local/mycat/conf/schema.xml        定义逻辑库,表、分片节点等内容。

server.xml配置:
MySQL运维从入门到跑路之读写分离
schema.xml配置:
MySQL运维从入门到跑路之读写分离

第四步

启动mycat服务器

[aaa@qq.com ~]# /usr/local/mycat/bin/mycat  start
检查是否启动成功
[aaa@qq.com ~]# jps
2695 WrapperSimpleApp
2728 Jps
查看端口状态
[aaa@qq.com conf]# ss -tnlp
State      Recv-Q Send-Q Local Address:Port                Peer Address:Port              
LISTEN     0      128        127.0.0.1:631                            *:*                   users:(("cupsd",pid=1195,fd=12))
LISTEN     0      128        127.0.0.1:6010                           *:*                   users:(("sshd",pid=2080,fd=9))
LISTEN     0      1          127.0.0.1:32000                          *:*                   users:(("java",pid=2695,fd=4))
LISTEN     0      128                *:111                            *:*                   users:(("rpcbind",pid=750,fd=4),("systemd",pid=1,fd=47))
LISTEN     0      5      192.168.122.1:53                             *:*                   users:(("dnsmasq",pid=1445,fd=6))
LISTEN     0      128                *:22                             *:*                   users:(("sshd",pid=1193,fd=3))
LISTEN     0      128            [::1]:631                         [::]:*                   users:(("cupsd",pid=1195,fd=11))
LISTEN     0      128            [::1]:6010                        [::]:*                   users:(("sshd",pid=2080,fd=8))
LISTEN     0      50              [::]:1984                        [::]:*                   users:(("java",pid=2695,fd=58))
LISTEN     0      100             [::]:8066                        [::]:*                   users:(("java",pid=2695,fd=78))
LISTEN     0      50              [::]:43522                       [::]:*                   users:(("java",pid=2695,fd=60))
LISTEN     0      50              [::]:36804                       [::]:*                   users:(("java",pid=2695,fd=57))
LISTEN     0      100             [::]:9066                        [::]:*                   users:(("java",pid=2695,fd=74))
LISTEN     0      80              [::]:3306                        [::]:*                   users:(("mysqld",pid=1721,fd=29))
LISTEN     0      128             [::]:111                         [::]:*                   users:(("rpcbind",pid=750,fd=6),("systemd",pid=1,fd=49))
LISTEN     0      128             [::]:22                          [::]:*                   users:(("sshd",pid=1193,fd=4))

第五步

在真实的后端数据库上给用户授权

mysql> grant all on testdb.* to aaa@qq.com'%' identified by 'QianFeng@12345';
mysql> flush privileges;

# 如果你的两台机器已经是主从复制状态,创建一次,如果不是,创建两次

# 测试连接,没有问题退出即可,主从两台相互测试
mysql -umycat -p'QianFeng@12345' -h mysql-master
mysql -umycat -p'QianFeng@12345' -h mysql-slave

第六步

登陆测试

[root@mycat mycat]# mysql -uroot -p'12345678' -P 8066 -h mycat

MySQL [(none)]> show databases;
+----------+
| DATABASE |
+----------+
| TESTDB   |
+----------+

第七步

读写分离策略测试

MySQL [(none)]> use TESTDB  -- 这个是我们上面设置的虚拟库
MySQL [TESTDB]> create table t1(id int); -- 创建表成功
1 row in set (0.00 sec)
MySQL [TESTDB]> show tables; -- 查询表时,发现为空
Empty set (0.00 sec)
由此我们得到结论,我们写的时候,写到了主库中,查询的时候,因为查询语句在从库执行,但是我们的主从并没有做同步,所以从库为空。也就是说,我们的读写分离成功了。在企业中,主从数据完全一样,我们的读写分离的好处也就体现了。