Mysql的主从复制和读写分离
主从复制
1,修改mysql的配置文件
[root@localhost mysql]#vim /etc/my.cnf
2.分别在配置文件中加入如下配置
server-id=1
log-bin=mysql-bin #开启二进制日志文件的名字
log-slave-updates #从机随着日志文件的变化而变化
slave-skip-errors=all #跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断
server-id=2
log-bin=mysql-bin
log-slave-updates
slave-skip-errors=all
···
注意:两个机器的server-id不能一致,自己选择哪个为主那些为从
3.重启mysql服务
systemctl restart mysqld
4.登录mysql执行如下命令检测配置是否生效
SHOW VARIABLES like 'server_id';
5.登录master节点执行如下命令
show master status;
6.登录从节点执行如下命令:每个从都要执行使得从机与主机日志保持一致
change master to
master_host='192.168.150.128',
master_user='root',
master_password='root',
master_log_file='mysql-bin.000001',
master_log_pos=120;
7.开启从节点
start slave;
8.查看从节点状态
show master status\G;
************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 10.15.0.9
Master_User: root
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 120
Relay_Log_File: mysqld-relay-bin.000002
Relay_Log_Pos: 283
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
注意:
1.出现 Slave_IO_Running: Yes 和 Slave_SQL_Running: Yes 说名成功,
2.如果在搭建过程出现错误,可以查看查看错误日志文件 cat /var/log/mysqld.log
9.通过客户端工具进行测试
10.关闭主从复制(在从节点执行),如果不手动关闭的话,便会一直保持!
stop slave;
读写分离《中间件Mycal》
1.下载mycat
http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
2.解压mycat
tar -zxvf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
注意:
以下这些配置只在写节点配置就行
3.配置mycat中conf下的配置schema.xml
<?xml version="1.0"?>
<!DOCTYPE mycat:schema SYSTEM "schema.dtd">
<mycat:schema xmlns:mycat="http://io.mycat/">
<!-- 定义MyCat的逻辑库 name是自定义的mycat逻辑库名 dataNode 定义数据节点,对应下一行的name -->
<schema name="mycat" checkSQLschema="false" sqlMaxLimit="100" dataNode="dataNode"></schema>
<!-- 定义MyCat的数据节点 database配置你的真实数据库名 -->
<dataNode name="dataNode" dataHost="dtHost" database="project" />
<dataHost name="dtHost" maxCon="1000" minCon="10" balance="1"
writeType="0" dbType="mysql" dbDriver="native" switchType="-1" slaveThreshold="100">
<!--维持心跳-->
<heartbeat>select user()</heartbeat>
<!--写节点-->
<writeHost host="hostM1" url="10.10.0.151:3306" user="root" password="root">
<!--从节点-->
<readHost host="hostS1" url="10.10.0.152:3306" user="root" password="root" />
</writeHost>
</dataHost>
</mycat:schema>
4,配置登陆mycat的权限server.xml 逻辑库名一定要和schema.xml的一致
<!DOCTYPE mycat:server SYSTEM "server.dtd">
<mycat:server xmlns:mycat="http://io.mycat/">
<system>
<!-- 这里配置的都是一些系统属性,可以自己查看mycat文献参考-->
<property name="defaultSqlParser">druidparser</property>
<property name="charset">utf8</property>
</system>
<!--配置mycat的用户信息-->
<user name="root">
<property name="password">root</property>
<!-- 配置逻辑库名 -->
<property name="mycat">mycat</property>
</user>
</mycat:server>
5,因为mycat默认的启动时间为5s,超时即失败。因此我们要自己设置它的启动等待时间 !进入 wrapper.xml文件进行配置,在任意位置添加即可。
wrapper.startup.timeout=7200
以秒为单位,7200秒=2小时
6 启动Mycal
./bin/mycat console
或./bin/mycat start
7.查看日志
tail -f ../logs/mycat.log
8.数据库连接配置,测试
用navicat(大黄) 连接MyCal 端口默认为8066
如果要和SpringBoot 集成的话在 yml 上配置
#配置数据源(读写分离数据源)
datasource:
type: com.alibaba.druid.pool.DruidDataSource
driver-class-name: com.mysql.jdbc.Driver
url: jdbc:mysql://192.168.150.128:8066/mycat #连接mycat逻辑库
username: root
password: root