一主一从
my.cnf配置
主:
修改配置文件:vim /etc/my.cnf
#主服务器唯一ID
server-id=1
#启用二进制日志
log-bin=mysql-bin
# 设置不要复制的数据库(可设置多个)
binlog-ignore-db=mysql
binlog-ignore-db=information_schema
#设置需要复制的数据库
binlog-do-db=需要复制的主数据库名字
#设置logbin格式
binlog_format=STATEMENT
完成后输入命令show master status查看一下是否成功
从:
修改配置文件:vim /etc/my.cnf
#从服务器唯一ID
server-id=2
#启用中继日志
relay-log=mysql-relay
主机、从机重启 MySQL 服务
⑤ 主机从机都关闭防火墙
⑥ 在主机上建立帐户并授权 slave
#在主机MySQL里执行授权命令
GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '123123';
查看主机状态
show master status;
#复制主机的命令
CHANGE MASTER TO MASTER_HOST='主机的IP地址',
MASTER_USER='slave',
MASTER_PASSWORD='123123',
MASTER_LOG_FILE='mysql-bin.具体数字',MASTER_LOG_POS=具体值;
#启动从服务器复制功能
start slave;
#查看从服务器状态
show slave statusG;
⑨ 如何停止从服务复制功能
stop slave;
⑩ 如何重新配置主从
stop slave;
reset master;
以前操作过。先停止从,然后重置从,再次连接
stop slave;
reset slave;
change master to master_host='127.0.0.1',master_port=3320,master_user='slaveuser',master_password='slavepwd1111',master_log_file='mysql-bin.000001';
start slave;
show slave status G;
读写分离
修改 Mycat 的配置文件 schema.xml
之前的配置已分配了读写主机,是否已实现读写分离?
验证读写分离
(1)在写主机插入:insert into mytbl values (1,@@hostname);
主从主机数据不一致了
(2)在Mycat里查询:select * from mytbl;
修改<dataHost>的balance属性,通过此属性配置读写分离的类型
负载均衡类型,目前的取值有4 种:
(1)balance="0", 不开启读写分离机制,所有读操作都发送到当前可用的 writeHost 上。
(2)balance="1",全部的 readHost 与 stand by writeHost 参与 select 语句的负载均衡,简单的说,当双主双从
模式(M1->S1,M2->S2,并且 M1 与 M2 互为主备),正常情况下,M2,S1,S2 都参与 select 语句的负载均衡。
(3)balance="2",所有读操作都随机的在 writeHost、readhost 上分发。
(4)balance="3",所有读请求随机的分发到 readhost 执行,writerHost 不负担读压力
为了能看到读写分离的效果,把balance设置成2,会在两个主机间切换查询
…
<dataHost name="host1" maxCon="1000" minCon="10" balance="2"
writeType="0" dbType="mysql" dbDriver="native" switchType="1"
slaveThreshold="100">
…
下面是其他信息,可以参考
mysql> grant replication slave on . to 'rep'@'10.168.1.159' identified by '123456';
Query OK, 0 rows affected, 1 warning (0.01 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
3.备份需要同步的数据库
锁定一下表:
flush tables with read lock;(为了同步前数据一致。)
mysql配置信息
[client]
# 设置mysql客户端连接服务端时默认使用的端口
port=3318
[mysql]
default-character-set=utf8
[mysqld]
character-set-server=utf8
port=3318
# 默认存储引擎innoDB,从库可设置MyISAM
default-storage-engine=INNODB
# 配置数据库服务器id,主从配置中必须唯一。
server-id=1
# 配置mysql的安装路径
basedir=E:\soft\cluster\mysql\master01
# 配置mysql的数据库文件存放位置。也即mysql data的存放位置。
datadir=E:\soft\cluster\mysql\master01\data
# 配置可访问mysql服务的机器ip地址信息。 0.0.0.0代表不限。
bind-address=0.0.0.0
# 配置允许最大连接数
max_connections=200
# 实现级联的同步,例如双主双从中,masterA、masterB互为主从,slaveB为masterB的从库,那么masterB中必须设置级联参数,这样,在masterA中的更新才能够最终执行到slaveB上
# 此参数默认关闭状态,如果不手动设置,那么bin-log只会记录直接在本库中执行的SQL语句,
# 而由复制replication机制的SQL线程读取的reply-log而执行的SQL是不会记录到bin-log中的,那么也就是说,无法再继续的执行相关的SQL。那么保证不了最终一致性
# 简单说就是设置主服务器之间复制的数据是否需要往下面的从服务器中去复制,有这个字段表示往下面的从服务器中去复制
# 在多个主从配置的时候,根据业务场景选择是否添加此参数
log-slave-updates
# 配置二进制文件binlog
# 这里配置定义的只是个index索引文件,即会生成的是mysql-bin.index文件,而实际存储数据的是类似于mysql-bin.000001之类的文件,超出范围会继续生成mysql-bin.000002,以此类推
log-bin=mysql-bin
# 配置bin-log文件的模式。
# STATEMENT:基于sql语句级别,记录每一条修改数据的sql语句。mysql默认采用策略
# ROW:基于行的级别。记录每一行记录的变化,也即记录每一行的修改都记录binlog中,不记录sql语句。记录数据行的变化。在全表修改的时候,会产生大量的日志记录
# MIXED:上述两种混合模式。默认使用STATEMENT,特殊情况下切换ROW。比如DML更新INNODB表。
binlog_format = MIXED
# 刷盘配置,默认为0,表示的是刷盘时间由OS来决定,每隔一段时间就会刷新缓存数据到磁盘中
# 可设置值,代表的是没多少个事务提交刷一次binlog
#sync_binlog=0
双主双从
参考目录mycat下的pdf文档