主 10.6.11.230
从同步 10.6.11.231
从延迟同步 10.6.11.232
安装mysql5.7
创建主从
主从配置参考----------------------------------------------------------------------
先在2个机子上的/etc/my.cnf 上加入
然后重启mysql再在master上运行
grant replication slave, replication client on *.* to 'root'@'10.6.11.231' identified by 'Hangzhou@123';
grant replication slave, replication client on *.* to 'root'@'10.6.11.232' identified by 'Hangzhou@123';
下面2条方便以后禁止slave用户的连接,直接删除slave用户即可 执行了上面一步 请忽略下面2步
CREATE USER repl_user;
GRANT REPLICATION SLAVE On *.* TO repl_user IDENTIFIED BY 'ht00@pass';
进入mysql客户端执行
flush privileges;
show master status;
slave上执行
change master to master_host='10.6.11.230',master_user='root',master_password='Hangzhou@123',master_port=3306,master_log_file='mysql-bin.000002',master_log_pos=1081,master_connect_retry=30;
在slave 上执行show slave status\G; #显示2个no
start slave;
在slave 上执行show slave status\G; #显示2个yes
SQL_Delay:一个非负整数,表示秒数,Slave滞后多少秒于master。
SQL_Remaining_Delay:当 Slave_SQL_Running_State 等待,直到MASTER_DELAY秒后,Master执行的事件,
此字段包含一个整数,表示有多少秒左右的延迟。在其他时候,这个字段是0。
#这个单位是秒
change master to master_delay = 86400;
这个并不会因为mysql重启失效
其中一个从是异步同步,另一个从实行延迟一天同步 用于
1误删除恢复
2 延迟测试
3 历史查询
默认情况下,MySQL的复制功能是异步的,异步复制可以提供最佳的性能, 主库把binlog日志发送给从库,这一动作就结束了,并不会验证从库是否接收完毕,这一过程,也就意味着有可能出现当主服务器或从服务器端发生故障的时候,有可能从服务器没有接收到主服务器发送过来的binlog日志,这就会造成主服务器和从服务器的数据不一致,甚至在恢复时造成数据的丢失。
半同步复制模式必须在主服务器和从服务器端同时开启,否则主服务器默认使用异步复制模式
通过 set global rep-semi-sync-master-timeout=milliseconds 设置。需要注意的是作为服务器变量,服务器重启此值不被保存
需要在master配置文件/etc/my.cnf中 加入
需要在slave配置文件/etc/my.cnf中 加入
查看是否开启成功
SELECT PLUGIN_NAME, PLUGIN_STATUS FROM INFORMATION_SCHEMA.PLUGINS WHERE PLUGIN_NAME LIKE '%semi%';
测试
停止2台slave
stop slave;
创建一个db 测试 发现正确 有延迟10s
show status like '%semi%';
下图看到slave已经关闭了半同步复制模式
重启slave
再测试是否重新切回了半同步复制
2种同步方式 测试成功
percona-xtrabackup 用于备份及恢复都很好用
cd /tmp/
wget https://www.percona.com/downloads/XtraBackup/Percona-XtraBackup-2.3.5/binary/redhat/7/x86_64/percona-xtrabackup-2.3.5-1.el7.x86_64.rpm
yum localinstall percona-xtrabackup-2.3.5-1.el7.x86_64.rpm -y
创建测试库
备份所有数据库 可以innobackupex –-help 查看
innobackupex --defaults-file="/etc/my.cnf" --user=root --password=Hangzhou@123 --socket=/tmp/mysql.sock /tmp/
不支持5.7.12尴尬 应该是要安装2.4版本
先用mysql5.6.41演示一下
备份所有数据库
如果你是mysql5.6 你可以直接用innobackupex 备份数据库,使生成的库 直接成为slave库。
MD5校验失败 出现这个错误是因为安装Xtrabackup 2.3.5时,没有安装 perl-Digest-MD5组件 不过问题不大也能备份出来 也可以yum安装解决
yum -y install perl-Digest-MD5
文件夹就是数据库名
yum安装依赖之后重新备份不报错了 顺便用1G内存加速一下备份
截一个第二天没有用内存加速 备份成功的图
备份主库10.6.11.234数据
innobackupex --defaults-file=/etc/my.cnf --host=localhost --user=root --password=Hangzhou@123 /tmp/
拷贝备份文件至slave主机
scp -r /tmp/2018-09-04_13-28-53/ 10.6.11.235:/tmp/dbback/
登录slave主机10.6.11.235
停止数据库
service mysqld stop
数据目录重命名
mv /usr/local/mysql/data /usr/local/mysql/data_bak
应用日志 恢复的时候也可以用内存加速哦
innobackupex --apply-log /tmp/dbback/2018-09-04_13-28-53/ --use-memory=1G
chown -R mysql:mysql /usr/local/mysql
启动mysql 建议用./mysqld &
slave 启动成功
看到同行说,MySQL 5.6版本以后,在进行主从复制的时候可以使用GTID的方式,无需再找binglog和pos点,只需要知道主服务器的IP、端口、账户、密码就可以实现自动找点同步。没有亲身实践过,不是很清楚。