赞
踩
主从复制binlog日志方式
量大的时候使用GTID效率更高,维护起来比较麻烦
有了主从同步也要做备份(双保险,本地有一份,主从同步也有一份 )
1、准备环境两台机器,关闭防火墙和selinux。---两台机器环境必须一致。时间也得一致 10.36.107.10 mysql-master 10.36.107.11 mysql-slave 2、两台机器安装mysql5.7(略)建议使用相同的安装方式 注意: 对主库已有的数据库不会进行自动同步。 主从同步之前,对主库上已有数据库备份,并在从库上导入同步。 1.开始配置主服务 在主服务器上添加配置 vim /etc/my.cnf [mysqld] log-bin=/usr/local/mysql/logs/mysql-bin/mylog server-id=1 重启服务 systemctl restart mysqld 在从服务器上添加配置 [mysqld] server-id=2 重启服务 systemctl restart mysqld 在主服务器上 创建日志目录并赋予权限 [root@mysql-master ~]# mkdir /usr/local/mysql/logs/mysql-bin/mylog [root@mysql-master ~]# chown mysql:mysql /usr/local/mysql/logs/mysql-bin/mylog 2.在主服务器上查看binlog以及POS mysql> show master status \G; 194 3.给主库授权 创建主从同步的用户:(只设置一个复制权限就可以了 slave ) mysql> grant replication slave on *.* to 'repl'@'%' identified by 'Qf@12345!'; mysql> flush privileges; 查看状态 状态码会发生变化 mysql> show master status \G; 629 3在从服务器上 从库重设#全在从库执行(断开于主库之间的通信,脱离主从关系) mysql> stop slave; mysql> reset slave; mysql> reset master; 查看状态 状态码会发生变化 mysql> show master status \G; (执行这条命名发现登录不上 就重启一下 systemctl stop mysqld systemctl start mysqld mysql然后在登录,因为之前做过GTID残留) mysql> change master to master_host='192.168.171.15', master_user='repl', master_password='Qf@12345!', master_log_file='/usr/local/mysql/bin-log/binlog.000002', master_log_pos=2625; find / -name "binlog.000002" 查找binlog的绝对路径 /usr/local/mysql/bin-log/binlog.000002 启用从库身份 mysql> start slave; 查看状态 mysql> show slave status\G; #查看状态,验证sql和IO是不是yes。 在主服务器创建数据库a2 mysql> create database a2; 在从服务器上进行查看a2 mysql> show databases; 在主服务器删除数据库a2 mysql> drop databases a2; 在从服务器上进行查看a2也删除了 mysql> show databases; 开启只读模式 查看是否只读模式:show variables like 'read_only'; 关闭只读模式 vim /etc/my.cnf read-only=1 并重启mysql服务 systemctl restart mysqld
mysql主从,master宕机,如何进行切换?
主机故障或者宕机:
1)在salve执行:
mysql> stop slave;
mysql> reset master;
2)查看是否只读模式:show variables like 'read_only';
只读模式需要修改my.cnf文件,注释read-only=1并重启mysql服务。
或者不重启使用命令关闭只读,但下次重启后失效:set global read_only=off;
3)查看show slave status \G;
4)在程序中将原来主库IP地址改为现在的从库IP地址,测试应用连接是否正常
[root@localhost ~]# vim /usr/local/mysql/data/auto.cnf
[auto]
server-uuid=4f37a731-9b79-11e8-8013-000c29f0700f
修改uuid并重启服务
主库查看binlog,pos mysql> show master status \G; *************************** 1. row *************************** File: mylog.000003 Position: 348 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec) 从库上操作 mysql>stop slave; mysql>reset slave; mysql>reset master; #从库的binlog已经无效了,所以要执行这个命令清空binlog CHANGE MASTER TO MASTER_HOST='10.36.107.10', MASTER_USER='slave', MASTER_PASSWORD='Qf@12345!', MASTER_LOG_FILE='mylog.000003', MASTER_LOG_POS=348; mysql> start slave; mysql> show slave status\G;
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。