具体实验环境所需要的配置
名称(alias) | 扮演角色 | IP | MySQL版本 | 系统平台 |
A(node3) | 主服务器 | 172.15.251.23 | MariaDB10 | CentOS6.5 64bit |
B(node4) |
从服务器,相对于A (级连复制主服务器相对于C) |
172.15.251.24 | MariaDB10 | CentOS6.5 64bit |
C(node2) | 级连复制从服务器 | 172.15.251.22 | MariaDB10 | CentOS6.5 64bit |
D(node1) | MySQL-Proxy | 172.15.251.21 | MariaDB10 | CentOS6.5 64bit |
一,主从复制概念理解与概述,一张图介绍主从复制的原理
大致描述一下过程:
B服务器的IO线程从A服务器获取二进制日志,并在本地保存为中继日志,然后通过SQL线程来在B服务器上执行中继日志中的内容,从而使B服务器的数据库和A服务器数据库保持一致。主从同步的详细过程如下:
1.A验证B的连接。
2.A为B开启一个线程。
3.B将日志的偏移位告诉A。
4.A检查该值是否小于当前二进制日志偏移位。
5.如果小于,则通知B来取数据。
6.B持续从A取数据,直至取完,这时,B服务器IO线程进入睡眠,A服务器IO线程同时进入睡眠。
7.当A有更新时,A服务器IO线程被激活,并将二进制日志推送给B服务器,并通知B服务器IO线程进入工作状态。
8.B服务器SQL线程执行二进制日志,随后进入睡眠状态。
二,主从复制配置过程用到的参数及详解(很枯燥,但必须记住)
注:以下参数均配置在文件/etc/my.cnf [mysqld]配置段中
1,service_id=##,主从复制架构 中,全局mysql服务器server-id必须唯一,实际应用中建议各id的数值间隔大一些,方便以后架构扩展及服务器的增删
2,log_bin={on|off|/some_path/log_file_name},开启二进制日志,on默认保存到datadir目录中,强烈建议二者不要放在同一磁盘中,主从实验中,从服务器设置为log_bin=off还是不能关闭二进制日志,必须注释掉此行(#log_bin)
3, binlog_format={statement|row|mixed},设置二进制日志记录的格式,sql语句,数据行,混合模式
statement:记录日志文件中的数据量小,但记录语句不精确,如函数,存储过程所执行的具体过程等
row:记录日志文件中的数据量大(如按一定比例更新全公司员工工资时,会记录每一次的update语句),记录数据精确,(生产 中,用row模式的比较多)
mixed:兼有二者的特性
4,log_bin_trust_function_creators=[on|off]默认为off,用于控制创建存储函数且被调用时,如果会导致不安全的事件发生,是否允许创建函数,创建函数有可能危害数据库
5,sql_log_bin = {on|off} 当前会话的sql语句是否记录在日志中,可以修改此参数,不记录当前会话中所输入的SQL语句,要有root权限进行修改
6,sync_binlog=[on|off] 是否即时同步binlog日志,基于commit同步,与auotcommit参数类似,强烈开启
autcommit:每执行一次修改操作,都自动同步到二进制日志和数据库中,增加IO的写操作,可以理解为写两次,IO压力过大
sync_binlog:只把修改动作记录到二进制日志文件当中,(首先保证二进制日志当中有此操作记录)可以理解为写一次,但最终还是要写到数据库中的,出现崩溃时,可以根据此操作记录进行恢复
会话断开会自动autocommit;
7,max_binlog_cache_size = 最大二进制日志缓冲空间大小,仅缓冲事务类的语句,单位 bytes
8,max_binlog_stmt_cache_size = 事务非事务类共用缓存空间大小 语句缓存,单位 bytes
9,max_binlog_size = 二进制日志文件大小 字节,默认1G
10,relay_log_purge={on|off} 是否自动清理从服务器上不再需要的中继日志(从服务器参数)
11,relay-log=[on|off|/some_path/log_file_name]开启中继日志,on默认保存到datadir目录中,强烈建议二者不要放在同一磁盘中,主从复制架构中,从服务器参数,中继日志只需设置此参数,其它中继参数默认即可,够用)
12,read-only=on 强烈建议开启此参数,防止一般用户对从服务器复制的数据库进行更新操作。
13,auto_increment_offset = 1 起始基数(主-主复制架构中的参数,必须设置的设置,避免属性为auto_increment的字段,在复制过程中出现重复复制,造成复制停止或出错)
14,auto_increment_increment=2,每次增长的步长(主-主复制架构中的参数,必须设置的参数)
15,log_slave_updates=1 是否从服务器从主服务器收到的更新应记入从服务器自己的二进制日志。主从级联复制用到些参数
16,skip_slave_start 参数用于在主服务器中设置,主服务器启动时,是否对从服务器启动做启动检查
三,基本主从复制的具体实现(注:生产中,以下的配置是绝对不可能出现的,)
主从复制配置概述:主开始二进制日志功能,从不用开启,但一定要开启中继日志功能,在使用change master to 命令定义主服务器时,要注意其正在使用的二进制日志文件,及当前所修改的记录的位置
1,主从都为新建服务器(干净)
1)A主服务器文件my.cnf增加以下内容(思密达,配置的内容太少了吧,>_<,我复制裁剪过发现,其实默认的参数还是很多的)
server-id= 10
log-bin=/mydata/binlogs/master-bin
##二进制日志文件存放目录及文件名称前缀,须先创建目录且属主属组为mysql
binlog_format=row ##其实这个参数也可以省略
2)B主服务器文件my.cnf增加以下内容(从服务器无须开启二进制日志)
server-id= 20
relay_log=/mydata/relaylogs/relay_logs
3)启动A主服务器
4)启动B从服务器
2,主服务器运行一段时间,增加一从服务器(主服务器有生产数据库,增加干净的从服务器)
模拟环境描述:
-----A服务器已经有school数据库,里面有表courses,stutents,teachers,数据库testschool中有表test,两库中的表都有数据记录
-----新增加的从服务器为新机器
1)在A主服务器新建用于从服务器复制的用户帐户
mysql>grant all privileges on *.* to admin@‘172.%.251.%‘ identified by ‘admin‘;
mysqldump -uroot -p --databases school testschool --lock-tables --flush-logs --master-data=2 >school_testschool.sql
scp school_testschool.sql 172.15.251.24:/tmp
2)在B从服务器上导入主服务器上的库的备份
3,主从半同步具体配置实现
主从半同步复制概述:半同步技术由google研发并开源提供给mysql,支持版本为mysql5.5以后,是属于插式式安装方式,,工作特点:主从复制架构中,往往会有多台从服务器,如果多台从服务器同时发io线程同步二进制日志,事必会造成主服务器上更大的IO压力,而半同步复制机制是,主服务器只选择一台从服务器,保证完成同步复制后,其它的从服务器就不再考虑是否完成同步复制,多台从服务器避免了同时从服务器同时iothread,最终还是会同步完成复制
具体配置:
1)主从同步及chang master to部分请参照上面( 1,主从都为新建服务器(干净))
2)主服务器关同步插件安装
install plugin semi_rsync_repl_master soname ‘repl_semi_master.so‘
set
4,主-从级联复制架构具体配置实现
主-从级联复制概述:依据上面已经实现的主-从复制实例,修改从服务器的配置文件,开启二进制日志功能,再增加服务器C,配置文件只开启中继日志功能并且change master to指B服务器二进制文件及位置
1)A主服务器文件my.cnf增加以下内容(思密达,配置的内容太少了吧,>_<,我复制裁剪过发现,其实默认的参数还是很多的)
server-id= 10
log-bin=/mydata/binlogs/master-bin
binlog_format=row
skip-slave-start
2)修改主-从级联复制架构中的B服务器my.cnf,开启二进制日志及中继日志功能
server-id= 20
log-bin=/mydata/binlogs/master-bin
binlog_format=row
relay-log=/mydata/relaylogs/master-relay
log_slave_updates=1
skip-slave-start
3)修改主-从级联复制从服务器(C)的文件my.cnf,开启中继日志功能,如下:
server-id=30
relay-log=/mydata/relaylogs/master-relay
四,主-主同步复制的具体实现
主-主复制配置概述:两台服务器都要开启二进制,中继日志功能,在使用change master to定义主服务时,要相互指向对方当前正在使用的日志文件,及当前所修改的记录的位置,特别强调,如果在数据库中有自动增长的字段类型(auto_increment),一定要设置不同的起始增长值和同样的步长,一般为一台为奇娄增长值,一台为偶数增长值。
1)A主服务具体配置
server-id= 10
log-bin=/mydata/binlogs/master-bin
binlog_format=row
relay-log=/mydata/relaylogs/master-relay
skip-slave-start
2)B主服务具体配置
server-id= 20
log-bin=/mydata/binlogs/master-bin
binlog_format=row
relay-log=/mydata/relaylogs/master-relay
skip-slave-start