工具准备
- mysql两台(版本推荐5.5以上):
- A主mysql:192.168.10.1:3306, 用户root,密码123456
- B备mysql:192.168.10.2:3306, 用户root,密码123456
AB两台服务器中的mysql都创建
sync_test
数据库
实现mysql主备复制
主要思路:A开启日志,B读取操作日志,同步执行。
配置A主mysql
在mysql安装目录下创建目录和文件
mysql/log/mysql-bin.log
修改my.ini
[mysqld]
server-id=1 #主机标示,整数
port=3306
log-bin="xxx/mysql/log/mysql-bin.log" #确保此文件可写
read-only=0 #主机,读写都可以
binlog-do-db=sync_test #需要备份数据库,多个写多行
binlog-ignore-db=mysql #不需要备份的数据库,多个写多行
- 允许mysql远程访问(lnmp服务器需要去掉防火墙)
mysql -uroot -proot
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.10.*' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
- 重启A主mysql数据库
配置B备mysql
在mysql安装目录下创建目录和文件
mysql/log/mysql-bin.log
修改my.ini
[mysqld]
# add for sycn test
server-id=2 #从机标识
log-bin="xxx/mysql/log/mysql-bin.log" #确保此文件可写
#master-host="192.168.10.1" #主机Ip
#master-user=root #数据库访问用户名
#master-pass=123456 #数据库访问密码
#master-port=3306 #主机端口
#master-connect-retry=60 #如果从服务器发现主服务器断掉,重新连接的时间差(秒)
replicate-do-db=sync_test #只复制某个库
replicate-ignore-db=mysql #不复制某个库
- 允许mysql远程访问(lnmp服务器需要去掉防火墙)
mysql -uroot -proot
mysql>GRANT ALL PRIVILEGES ON *.* TO 'root'@'192.168.10.*' IDENTIFIED BY 'root' WITH GRANT OPTION;
mysql>FLUSH PRIVILEGES;
重启B备mysql数据库
配置B备mysql的数据来源,核实高亮处的状态是否正常。
mysql -uroot -proot
mysql>change master to master_host='192.168.110.1',master_port='3306',master_user='root',master_password='root';
mysql>slave start;
mysql>show slave status;
验证同步配置结果
- A主mysql:使用navicat工具,在sync_test库中创建sync_table表,并添加一些数据
- B备mysql:使用navicat工具,查看sync_test库,可以看到sync_table表和数据已被同步
实现读写分离
主要思路:使用mycat中间件,转发sql指令到后端mysql节点。mycat不负责数据库同步。
安装mycat
mycat可以认为它是一个数据库访问中间件,但更像ngnix等产品,具备访问路由、多表分表分片操作等功能。总之很强大。
安装过程自己百度~~~(java环境为jdk1.7以上,否则mycat将不支持)
配置mycat
server.xml
,配置访问用户及权限。修改高亮处信息,其中admin
、user
为访问mycat的用户,TESTDB
为mycat虚拟的数据库,供上层应用访问。
<user name="admin">
<property name="password">admin</property>
<property name="schemas">TESTDB</property>
</user>
<user name="user">
<property name="password">user</property>
<property name="schemas">TESTDB</property>
<property name="readOnly">true</property>
</user>
2)schema.xml。这部分不太好理解,精简了一下,主要分schema、dataNode、dataHost三个主要配置。
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<schema name="TESTDB" checkSQLschema="false" sqlMaxLimit="100" dataNode="dn1">
<!-- 这里不配置,代表所有的表分片到dn1节点-->
</schema>
<dataNode name="dn1" dataHost="localhost1" database="sync_test" />
<dataHost name="localhost1" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="1" slaveThreshold="100">
<heartbeat>select user()</heartbeat>
<!-- can have multi write hosts -->
<writeHost host="hostM1" url="192.168.10.1:3306" user="root" password="123456">
<!-- can have multi read hosts -->
<readHost host="hostS2" url="192.168.10.2:3306" user="root" password="123456" />
</writeHost>
</dataHost>
</mycat:schema>
启动mycat
cd xxx\mycat\bin
./startup_nowrap.sh
- 成功启动信息
MyCAT Server startup successfully. see logs in logs/mycat.log #启动成功将看到如下信息。
测试读写分离
使用navicat连接mycat,操作方式和连接物理mysql库一致,用户admin,密码admin,端口8066
在TESTDB虚拟库中,创建新表test2,增加一些数据
查看A节点、B节点数据已同步