主库配置:
log-bin=mysql-bin-1 ##自动生成mysql-bin.000001格式的binlog文件,二进制日志必须开启。
max_binlog_size= 20M #设置单个binlog日志文件大小
binlog_format=row #mysql复制模式,三种SBR(基于sql语句复制)、RBR(基于行的复制)、MBR(混合模式复制)
expire_logs_days = 7 #自动清理binlog日志,只保留指定日期内的binglog日志
server-id=1 ##建立的主从库中,该id必须唯一。
binlog-do-db=db1 #指定需要同步的数据库
binlog-do-db=db2 #指定需要同步的数据库
从库配置:
log-bin=mysql-bin-2 #用于区分,开启二进制日志。
server_id = 2 #必须唯一。
从库操作:
##############开启/关闭同步。
start slave;
stop slave;
stop slave io_thread;
start slave io_thread;
stop slave sql_thread;
start slave sql_thread; ##关闭/开启slave的sql同步进程
reset slave;
reset slave all; ##清除master.info和relay-log等从库配置,使该库与原主从无关。
show slave status\G;
purge binary logs to 'log_name'|before 'date'; ##清理指定binlog日志
change master to master_host='',master_port='',master_user='',master_password='',master_log_file='', master_log_pos='';
##建立主从
load data from master;
set global sql_slave_skip_counter;
SET GLOBAL READ_ONLY = 0|1; ##设置为1(on)表示开启只读,0(off)关闭只读
##与flush tables with read lock区别:root用户还可以写,其他用户不能。flush tables不会失效。
change master to
master_host='192.168.163.131',
master_port=3307,
master_user='rep',
master_password='rep',
master_auto_position=1,
MASTER_HEARTBEAT_PERIOD=2,
MASTER_CONNECT_RETRY=1,
MASTER_RETRY_COUNT=86400;
set global slave_net_timeout=8;
slave_net_timeout(全局变量):MySQL5.7.7之后,默认改成60秒。该参数定义了从库从主库获取数据等待的秒数,超过这个时间从库会主动退出读取,中断连接,并尝试重连。
master_heartbeat_period:复制心跳的周期。默认是slave_net_timeout的一半。Master在没有数据的时候,每master_heartbeat_period秒发送一个心跳包,这样 Slave 就能知道 Master 是不是还正常。
slave_net_timeout:是设置在多久没收到数据后认为网络超时,之后 Slave 的 IO 线程会重新连接 Master 。结合这两个设置就可以避免由于网络问题导致的复制延误。master_heartbeat_period 单位是秒,可以是个带上小数,如 10.5,最高精度为 1 毫秒。
重试策略:
这样,主库宕机之后,约8~10秒感知主库异常,Orchestrator开始切换。另外还需要注意的是,orch默认是用主机名来进行管理的,需要在mysql的配置文件里添加:report_host和report_port参数。
主从复制的优点:
主从复制的缺点,如何解决?:
1、复制延迟,
延迟复制就是将 Slaves 节点与 Master 节点保持指定时间的复制间隔。
,所谓的延迟 ,只是对 SQL_Thread的线程的延迟。IO_Thread 主库发生的任何操作的日志都会同步到 slave,也就是说 IO_Thread 线程和主库是没有延迟的。只是SQL_Thread 与主库有延迟。只是执行时间延迟,而不是读取 binlog 时间延迟。