mysql的复制术语

扩展的方式:
	Scale up
	Scale Out 
	
复制:
	向外扩展
	二进制日志 
	单向
	
复制功用:
	数据分布
	负载均衡:读操作,适用于读密集型的应用
	备份
	高可用和故障切换
	MySQL升级测试
	
主从复制:
	从服务器:
		I/O线程:从master请求二进制日志信息,并保存至中继日志;
		SQL线程:从relay log中读取日志信息,在本地完成重放;
		
	异步模式:async
		1、从服务器落后于主服务器;
		2、主从数据不一致;
		
	二进制日志的格式:SET datetime = now()
		1、基于行
		2、基于语句
		3、混合
		
	双主:
		读:负载均衡
		写:无法均衡
		
	Perlcona-Galera Cluster

配置过程:

	1、master
		(1) 启用二进制日志;
		(2) 设置一个在当前集群中惟一的server-id;
		(3) 创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号;
		
	2、slave
		(1) 启用中继日志;
		(2) 设置一个在当前集群中惟一的server-id;
		(3) 使用有复制权限用户账号连接至主服务器,并启动复制线程;
		
	传统上:一主多从,但一从一主;
		而今:一从多主;
		
	服务器程序版本:最好相同;从高;

一、mysql的复制,主从模式

1.主服务器启动二进制日志,编辑/etc/my.cnf在其中增加如下两行内容
            server-id=1                                   mysqld的id号
            log-bin=/var/lib/mysql/mysql-bin   指明二进制日志的文件名,和路径
							innodb-file-per-table=1

 2.主服务器创建一个有复制权限(REPLICATION SLAVE, REPLICATION CLIENT)账号
 GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
										 'repluser'@'192.168.%.%' IDENTIFIED BY 'replpass';

 3.从服务器启动中继日志,编辑/etc/my.cnf在其中增加如下四行内容
						 server-id=2
						 relay-log=/var/lib/mysql/relay-log
						 relay-log-index=relay-log.index
						 innodb-file-per-table=1

4.从服务器配置从服务功能,首先查看主服务器的二进制pos位置
CHANGE MASTER TO MASTER_HOST='192.168.130.128',MASTER_USER='repluser',
MASTER_PMASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000004',MASTER_LOG_POS=187;

5.查看从服务器状态,开启IO与mysql进程,开启后就可以在线复制了
	SHOW SLAVE STATUS\G    查看状态
	START SLAVE                       开启进展

 6.效果展示,在主服务器中创建一个库CREATE DATABASE mydb2;
		 在从服务器中查看SLAVE 状态,可以看到从服务器已经读取
		 到pos=272的位置,证明从服务器可以复制

7.作为从服务器,应该不允许被写入数据,即限制从服务器只读
		a.在从服务器启动read_only;但仅对非具有SUPER权限的用户有效;
		b.阻止所有用户 :MariaDB> FLUSH TABLES WITH READ LOCK;
8.保证复制事务安全
		在master节点启用参数:
			sync_binlog = on                   将内存中的二进制同步到硬盘
			如果用到的为InnoDB存储引擎:
				innodb_flush_logs_at_trx_commit
				innodb_support_xa=on			
		在slave节点:
			skip_slave_start  不让slave线程自动启动,需手动启动

二、mysql的复制,双主模式

 双主:
		读:负载均衡
		写:无法均衡
		
	互为主从:
		1.数据不一致; 
		2.自动增长id
			定义一个节点使用奇数id
				auto_increment_offset=1
				auto_increment_increment=2
			定义另一个节点使用偶数id
				auto_increment_offset=2
				auto_increment_increment=2
				
		(1) 各自使用不同的server id
		(2) 都启用binlog和relay log 
		(3) 定义自动增长的id字段的增长方式
		(4) 都授权有复制权限的用户账号
		(5) 各自把对方指定为主服务器 
		
	GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 
	'repluser'@'172.16.%.%' IDENTIFIED BY 'replpass';
	
	3.在上面的基础上,两台主机的配置文件/etc/my.cnf
	 192.168.130.128
	 配置:server-id=1
							log-bin=/var/lib/mysql/mysql-bin
							relay-log=/var/lib/mysql/relay-log
							relay-log-index=relay-log.index
							innodb-file-per-table=1
							auto_increment_offset=1
							auto_increment_increment=2
	192.168.130.129
	配置:server-id=5
							log-bin=/var/lib/mysql/mysql-bin
							relay-log=/var/lib/mysql/relay-log
							relay-log-index=relay-log.index
							innodb-file-per-table=1
							auto_increment_offset=2
							auto_increment_increment=2

4.在每个主机的mysqld上都创建一个有复制权限的用户
	192.168.130.128
	配置:
	GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
										 'repluser'@'192.168.%.%' IDENTIFIED BY 'replpass';
	
	192.168.130.128
	配置:
	GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO
										 'repluser'@'192.168.%.%' IDENTIFIED BY 'replpass';
										 
										 
	5.查看每个主机的二进制日志pos位置,然后按照该位置,启动每个主机的slave服务
	192.168.130.128	
	配置:
	  CHANGE MASTER TO   MASTER_HOST='192.168.130.129',
		MASTER_USER='repluser',MASTER_PASSWORD='replpass',
		MASTER_LOG_FILE='mysql-bin.000002',MASTER_LOG_POS=288;
		
	192.168.130.12
	配置:
	  CHANGE MASTER TO   MASTER_HOST='192.168.130.128',
		MASTER_USER='repluser',MASTER_PASSWORD='replpass',
		MASTER_LOG_FILE='mysql-bin.000005',MASTER_LOG_POS=106;

6.用START SLAVE;开启两台机的slave功能便可完成双主模型
7.效果展示
		当128主机创建一个库时129的读取进度见图,
		当129主机创建一个库时128的读取进度见图,