MariaDB [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO copyuser@'192.168.10.%'> MariaDB [(none)]> FLUSH PRIVILEGES; 4 配置从数据库
[root@storage1 ~]# vim /etc/my.cnf
[mysqld]
datadir=/var/lib/mysql/
server-id=2
relay_log=relay-log
relay_log_index=relay-log.index
read_only=1
innodb_file_per_table=1
skip_name_resolve=1
datadir:指定数据所在目录
server-id不能为1,当一主多从时,其server-id也最好不同
relay_log:后跟路径表示开启中继日志,使用相对路径时表示在于数据目录在同一目录下。
read_only:从服务器只读。其他与主服务器一致。
启动服务:
[root@ storage1 ~]# systemctl start mariadb
与主服务器建立连接
MariaDB [(none)]> CHANGE MASTER TO MASTER_HOST=192.168.10.6,
-> MASTER_USER=copyuser,
-> MASTER_PASSWORD=copypass,
-> MASTER_LOG_FILE=' mysql-bin.000005',
-> MASTER_LOG_POS=24622;
MASTER_LOG_FILE, MASTER_LOG_FILE为备份时截止的事务时间点。可在恢复时使用的备份目录下xtrabackup_info文件中找出。 [root@ storage1~]# grep 'binlog_pos' 2017-11-13_20-29-22/xtrabackup_info binlog_pos = filename 'mysql-bin.000005', position '24622'
当然,如果主从复制架构构建时为从0开始。需要在主服务器上使用以下命令查看:
[root@storage ~]# mysql
MariaDB [(none)]> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000005 | 49652 | | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)
开启一个IO_THREAD线程
MariaDB [(none)]> START SLAVE ;
START SLAVE [IO_THREAD|SQL_THREAD];# 启动复制线程,停止的话使用STOP 主从复制架构中应注意要点: 1 应限制从服务器为只读
在从服务上设置read_only=ON;此限制对拥有SUPER权限的用户均无效
如何阻止所有用户:
mysq> FLUSH TABLES WITH READ LOCAK; # 连上去不退出(测试时使用) 2如何保证主从复制的事物安全?
在主节点启用参数:sync_binlog=ON,即遇到事物提交时,必须将bin-log缓冲区中记录下来的事件立即刷写至磁盘上的二进制日志文件中,从而通知从节点来复制同步。也可使用sysnc_binlog=n的方式,来开启此选项,当n次事务提交之后,MySQL执行一次fsync之类的磁盘同步命令,将缓冲区中内容写入磁盘。当n=0时,表示当事务提交之后,只将binlog_cache中的数据写入bin_log文件,而不进行磁盘同步,这种方式性能最好,但无法保证事务安全性
如果使用的是innodb存储引擎:
innodb_flush_logs_at_trx_commit= 1 # 将内存中的事物相关立即写到磁盘上的事物日志中去。
innodb_support_xa= ON # xa:分布式式事物;即是否让innodb支持分布式事物,分布式提交
在SLAVE节点:
skip_slave_start= ON # 关闭自动提交。选取手动启动,避免错误
必要的时候可以开启# MariaDB[(none)]> show variables like "%relay_log%";
主节点:
sync_slave_start = ON
从节点:
sync_relay_log
sync_relay_log_info
所遇故障:
使用备份恢复至从文件时在copy-back过程中出现Error: datadir must be specified.
故障说明:
说明是恢复时,未能找到数据恢复目录,此时只需要在mariaDB的配置文件中指定数据库文件目录即可
解决办法:
在配置文件中添加datadir参数。
主从复制中半同步复制架构实现:
根据前文所述首先构建主从复制架构,然后借助Google所提供的插件来实现半同步复制。
Mysql支持多种插件,rpm安装方式,插件所在目录为/usr/lib64/mysql/plugin 插件使用方法
INSTALL PLUGIN plugin_name SONAME 'shared_library_name';
注意:插件名称与插件文件名并非对应,使用时应查阅官方文档 半同步复制所用插件:
semisync_master.so
semisync_slave.so
半同步复制配置步骤详解: 1 配置主节点
MariaDB [(none)]>INSTALL PLUGIN rpl_semi_sync_master SONAME 'semisync_master.so';
MariaDB [(none)]> SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
查看到rpl_semi_sync_master_enabled状态为off状态,需把其打开。使用set命令
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_master_enabled=1; 2 配置从节点
MariaDB [(none)]>INSTALL PLUGIN rpl_semi_sync_slave SONAME 'semisync_slave.so';
MariaDB [(none)]>SHOW GLOBAL VARIABLES LIKE 'rpl_semi%';
MariaDB [(none)]> SET GLOBAL rpl_semi_sync_slave_enabled=1;
rpl_semi_sync_slave_enabled的状态也需设置为ON状态
3 重启从节点的IO_THIREAD线程并查看从节点状态
MariaDB [(none)]> STOP SLAVE;
MariaDB [(none)]> START SLAVE;
MariaDB [(none)]> SHOW SLAVE STATUS\G #确定节点状态无误并保证其IO_THREAD和SQL_THREAD线程正常启用后方能成功 4 验证
MariaDB [(none)]> show global status like 'rpl_semi_sync_master_clients'; #在主节点查从节点的个数
MariaDB [(none)]> show global status like 'rpl_semi%'; 或查看其参数可以使用insert或者建库建表语句对其进行测试,查看状态