主库配置:

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 时间延迟。

02-12 00:50