MySQL双主热备

mysql
创建于:2019年07月29日

解决的问题
master挂掉不会影响业务
实现心跳感应

配置从机

vim /etc/my.cnf

log-bin=mysql-bin
binlog_format=mixed
server-id = 130
relay_log = mysql-relay-bin
log_slave_updates = 1

#进入数据库授权
grant replication slave on *.* to [email protected] identified by 'password';

数据库中间件Mycat

解决读写分离

安装mycat需要java环境
jdk下载完成并解压后,vim /etc/profile
添加以下内容

JAVA_HOME=/root/java/jdk1.8.0_152 #文件路径
JRE_HOME=/root/java/jdk1.8.0_152/jre
CLASS_PATH=.:$JAVA_HOME/lib/dt.jar:$JAVA_HOME/lib/tools.jar:$JRE_HOME/lib
PATH=$PATH:$JAVA_HOME/bin:$JRE_HOME/bin
export JAVA_HOME JRE_HOME CLASS_PATH PATH
[root@localhost java]# source /etc/profile
[root@localhost java]# java -version
java version "1.8.0_152"
Java(TM) SE Runtime Environment (build 1.8.0_152-b16)
Java HotSpot(TM) 64-Bit Server VM (build 25.152-b16, mixed mode)

#下载Mycat中间件
wget http://dl.mycat.io/1.6-RELEASE/Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz
tar -zxvf Mycat
mv mycat /usr/local

配置server.xml文件里的user

user里的配置是项目里配置数据库连接的配置项

接着配置schema.xml文件

四个库每个都要给mycat服务器配置相应的权限
主库配置mycat服务器CURD权限
grant select,update,insert,delete on *.* to [email protected].134 identified by 'password';
从库配置mycat服务器读权限
grant select on *.* to [email protected].134 identified by 'password';

mycat端口为8066

netstat -tunpl | grep 8066
tcp6       0      0 :::8066                 :::*                    LISTEN      20668/java

在项目所在服务器中连接mycat服务器

mysql -uroot -ppassword -h192.168.153.134 -P8066

此时在数据库中增删改查另外四个数据库数据也会发生改变

mysql二进制日志

二进制日志的格式
mysql> show variables like ‘binlog_format’;
+———————-+———-+
| Variable_name | Value |
+———————-+———-+
| binlog_format | MIXED |
+———————-+———-+

基于段的格式 binlog_format=STATEMENT
日志记录量相对较小,节约磁盘及网络I/O
只对一条记录修改或者插入
row格式所产生的日志量小于段产生的日志量
UUID()和 user()函数复制时可能造成主从数据不一致

基于行的日志格式binlog_format=ROW
row格式可以避免mysql复制中出现的主从不一致,使MySQL主从复制更加安全
对每一行数据的修改比基于段的复制高效
使用ROW格式时需要设置Binlog_row_image=minimal(在更改数据时只记录修改的数据的字段,默认会记录整行数据)

混合日志格式 binlog_format=MIXED
根据SQL语句由系统在基于段或行的日志格式中进行选择
数据量的大小由所执行的SQL语句决定