mariadb主从复制:
复制:每个节点都有相同的数据集
从节点:
I/O Thread:从master请求二进制日志事件,并保持在中继日志中
SQL Thread:从中继日志中读取日志事件,在本地完成重放
主节点:
dump Thread:为每个slave的I/O Thread启动一个dump线程,用于向其发送binary log events
特点:
1.异步复制
2.主从数据不一致比较常见
3.一主多从
4.从服务器还可以有从服务
配置过程:
主节点:
1.启动二进制日志
2.为当前节点设置一个全局唯一的ID号
3.创建有复制权限的用户账号
replication slave,replication client
从节点:
1.启动中继日志
2.位当前节点设置一个全局唯一的ID号
3.使用有复制权限的用户账号连接至主服务器,并启动复制线程
复制架构中应该注意的问题:
1.限制从服务器为只读
在从服务器上设置read_only=ON;此限制对拥有SUPER权限的用户均无效;
阻止所有用户;
mysql>flush tables with read lock;
2.如何保证主从复制的事务安全:
在master节点启用参数:
sync_binlog=ON
如果用到的为InnoDB存储引擎;
innodb_flush_logs_at_trx_commit=ON
inndb_support_xa=ON
在slave节点;
skip_slave_start=ON
复制过滤器
让从节点仅复制指定的数据库,或指定数据库的指定表
有两种实现方式;
1.主服务器仅向二进制日志中记录与特定数据库(特定表)相关的事件;
问题:事件还原无法实现:不建议使用
binlog_do_db= #数据库白名单列表
binlog_ignore_do #数据库黑名单列表
2.从服务SQL_THREAD在replay中继日志的事件时,仅读取与特定数据库(特定表)相关的事件并应用于本地
问题:会造成网络磁盘IO浪费;
replicate_do_db=
replicate_ignore_db=
replicate_do_table=
replicate_ignore_table=
replicate_wind_do_table=
replicate_wind_ignore_table=
主从复制配置:
主节点:
vi /etc/my.cnf
在[mysqld]中加入:
log-bin=mysql_bin_log #启动二进制日志
server-id=1 #主节点和从节点一定要不通
innodb_file_per_table=ON
skip_name_resolve=ON
重启mariadb:systemctl restart mariadb
创建复制用户并授权:
MariaDB [(none)]> grant replication slave,replication slave on *.* to 'repluser'@'172.16.%.%' identified by '123456'
MariaDB [(none)]> show master logs;
+----------------------+-----------+
| Log_name | File_size |
+----------------------+-----------+
| mysql_bin_log.000001 | 30379 |
| mysql_bin_log.000002 | 1038814 |
| mysql_bin_log.000003 | 264 |
| mysql_bin_log.000004 | 264 |
| mysql_bin_log.000005 | 245 | #记住这个二进制文件名和对应的序号
+----------------------+-----------+
5 rows in set (0.00 sec)
从节点:
vi /etc/my.cnf
在[mysqld]中加入:
relay-log=relay-log
server-id=2
innodb_file_per_table=ON
skip_name_resolve=ON
重启mariadb:systemctl restart mariadb
连接主服务器:
MariaDB [(none)]> change master to master_host='172.16.6.12',master_user='repluser',master_password='123456',master_log_file='mysql_bin_log.000005',master_log_pos=245;
开始复制:
MariaDB [(none)]> start slave;
查看复制状态:
MariaDB [(none)]> show slave status\G;
mariadb半同步复制:
主节点
MariaDB [(none)]> install plugin rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> set global rpl_semi_sync_master_enabled=1;
MariaDB [(none)]> show plugins;
MariaDB [(none)]> show global variables like '%semi%';
MariaDB [(none)]> show global status like '%semi%';
从节点:
MariaDB [(none)]> install plugin rpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(none)]> set global rpl_semi_sync_slave_enabled=1;
MariaDB [(none)]> show plugins;
MariaDB [(none)]> show global variables like '%semi%';
MariaDB [(none)]> start slave
本文转自阿伦艾弗森 51CTO博客,原文链接:http://blog.51cto.com/perper/2058645,如需转载请自行联系原作者