1.理解MySQL主从复制原理。
复制是MySQL提供的一直高可用、高性能的解决方案,一般用来建立大型的应用,总体来说,分为以下三步:
(1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
(2)slave将master的binary log events拷贝到它的中继日志(relay log);
(3)slave重做中继日志中的事件,将改变反映它自己的数据。
2.完成MySQL主从复制。
=============================================================
1.在主服务器(master)上
启用二进制日志
选择一个唯一的server-id
创建具有复制权限的用户
2.在从服务器(slave)上
启用中继日志(二进制日志可开启,也可不开启)
选择一个唯一的server-id
连接至主服务器,并开始复制
==============================================================
1)设置server-id值并开启binlog参数
[mysqld]
log-bin = mysql-bin
server_id = 1
停止数据库# systemctl stop mysqld
启动数据库#systemctl start mysqld
show variables like '%log_bin%';
可见log-bin 开
2)建立同步账号
mysql> grant replication slave on *.* to rep@'192.168.95.%' identified by'123456';
mysql> show grants for rep@'192.168.95.%';
3)锁表设置只读
为后面备份准备,注意生产环境要提前申请停机时间;
mysql> flush tables with read lock;
提示:如果超过设置时间不操作会自动解锁。
mysql> show variables like'%timeout%';
测试锁表后是否可以创建数据库:
4)查看主库状态
查看主库状态,即当前日志文件名和二进制日志偏移量
mysql> show master status;
5)备份数据库数据
# mysqldump -uroot -p -A -B |gzip > /backup/mysql/mysql_bak.$(date +%F).sql.gz
6)解锁
mysql> unlock tables;
7)主库备份数据上传到从库
scp mysql_bak.2021-01-26.sql.gz 192.168.83.134:/tmp
从库上设置
1)设置server-id值并关闭binlog参数
停止数据库# systemctl stop mysqld
启动数据库#systemctl start mysqld
2)还原从主库备份数据
# cd /server/backup/
# gzip -d mysql_bak.2015-11-18.sql.gz
# mysql -uroot -p < mysql_bak.2015-11-18.
sql检查还原:
# mysql -uroot -p -e 'show databases;'
3)设定从主库同步
4)启动从库同步开关
mysql> start slave;
检查状态:show slave status\G
3.完成MySQL读写分离配置
Mycat实现MySQL主从复制读写分离
MyCAT的安装及部署
链接:https://pan.baidu.com/s/16Z7NFKuL2WX8b1ZKpk9AwA
提取码:yang
1>、部署jdk环境MyCAT用Java开发,需要有JAVA运行环境,mycat依赖jdk1.7的环境
rpm -ivh jdk-8u144-linux-x64.rpm
测试 : java -version
2>、安装Mycat
链接:https://pan.baidu.com/s/1bkDv1WkwXXr2YzBtvCRY8w
提取码:yang
tar xf Mycat-server-1.6-RELEASE-20161028204710-linux.tar.gz -C /usr/local/
3)添加环境变量
export PATH=$PATH:/usr/local/mycat/bin
[root@localhost mycat]# source /etc/profile.d/mycat.sh (当前生效)
3>、读写分离配置
1)不使用Mycat托管MySQL主从服务器,简单使用如下配置
#注意:配置前备份下配置文件
先做一个备份吧
打开
vim schema.xml
(1)<schema name="TESTDB"checkSQLschema="false"sqlMaxLimit="100"dataNode="dn1">
这里的TESTDB就是我们所宣称的数据库名称,必须和server.xml中的用户指定的数据库名称一致。添加一个dataNode="dn1",是指定了我们这个库只有在dn1上,没有分库。
(2)<dataNode name="dn1"dataHost="localhost1"database="db1" />
这里只需要改database的名字,就是你真是的数据库上的数据库名,可根据自己的数据库名称修改。
(3) <dataHostname="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1"slaveThreshold="100">
balance
1、balance=0不开启读写分离机制,所有读操作都发送到当前可用的writehostle
.2、balance=1全部的readhost与stand by writeHost 参与select语句的负载均衡。简单的说,双主双从模式(M1->S1,M2->S2,并且M1和M2互为主备),正常情况下,M1,S1,S2都参与select语句的复杂均衡。
3、balance=2所有读操作都随机的在readhost和writehost上分发
writeType负载均衡类型,目前的取值有3种:
1、writeType="0", 所有写操作发送到配置的第一个writeHost。
2、writeType="1",所有写操作都随机的发送到配置的writeHost。
3、writeType="2",不执行写操作。
switchType
1、switchType=-1表示不自动切换
2、switchType=1默认值,自动切换
3、switchType=2基于MySQL 主从同步的状态决定是否切换
datahost其他配置
<dataHost name="localhost1"maxCon="1000"minCon="10"balance="1"writeType="0"dbType="mysql"dbDriver="native"switchType="1">
maxCon="1000":最大的并发连接数
minCon="10":mycat在启动之后,会在后端节点上自动开启的连接线程
tempReadHostAvailable="1"
这个一主一从时(1个writehost,1个readhost时),可以开启这个参数,如果2个writehost,2个readhost时
<heartbeat>select user()</heartbeat> 监测心跳
(4)写与读
4>、创建管理用户
grant insert,delete,update,select on db1.* to mycat@'192.168.83.%' identified by '123456';
收回权限
revoke INSERT, UPDATE, DELETE ON school.* from 'mycat'@'192.168.83.%';
配置基本完成