mysql 主从复制
Posted 半醉半醒的博客
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了mysql 主从复制相关的知识,希望对你有一定的参考价值。
一、准备环境: 主(Master)机IP: 192.168.0.83 从(Slave) 机IP: 192.168.0.80
二、向主(Master)机添加远程登录的授权用户
1.向主(Master)服务器添加用户: @ 用户名: slave1 @ 密 码: 789 @ 允许自: 192.168.0.80 机器登录
授权方式1: 此种授权是可远程登录Master,仅用于主从复制没有其它任何select insert update等权限【推荐】
mysql> grant replication slave on *.* to ‘slave1‘@‘192.168.0.80‘ identified by ‘789‘;
2.刷新授权表:
mysql> flush privileges;
3.查看授权结果:
mysql> show grants for ‘slave1‘@‘192.168.0.80‘;
4.测试从Slave端登录远程主(Master)机:
# mysql -h 192.168.0.83 -u slave1 -p
789
5.从主(Master)机查看所有连接登录本机的客户端情况:
mysql> show processlist G
三、主(Master)机配置 vi编辑打开mysql配置文件 # vi /usr/local/mysql/etc/my.cnf 找到从约第56行开始确认以下三项: [mysqld]
log-bin=mysql-bin # 确认开启binlog日志
binlog_format=mixed # 确认binlog日志格式为mixd混合类型 server-id = 1 # 在整个主从架构内指定一个唯一的server-id,范围:1^32
四、从(Slave)机配置-【基本】 vi编辑打开mysql配置文件 # vi /usr/local/mysql/etc/my.cnf 找到从约第56行开始确认以下三项: [mysqld]
log-bin=mysql-bin # 确认也开启binlog日志 binlog_format=mixed # 确认binlog日志格式为mixd混合类型 server-id = 2 # 在整个主从架构内指定一个唯一的server-id,范围:1^32 ◆
五、在主(Master)机端操作:执行命令刷新主机binlog日志记录,查看主机的最后日志文件及最后pos起始点 mysql> flush logs; mysql> show master status; +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000009 | 107 | | | +------------------+----------+--------------+------------------+
六、在从(Slave)机启动slave服务
1.使用root用户登录到从(Slave)机 # /usr/local/mysql/bin/mysql -uroot -p123456 2.在从(Slave)上执行命令,动态改变连接到主(Master)机的配置,生成或更新master.info文件: 注: 在生产环境中,如果心跳感应到主机意外宕机,应用程序应该按预案选定出一台新主机,而其它的从机都需要执行一次下面 的 change master to ...语句,切换自己从属到新主机,这样比较灵活,操作的实质是更新master.info文件,查看此文件也 能发现MySQL其实是只能支持“一主多从”架构,而不能像Redis那样还可以支持多主一从架构。 mysql> change master to master_host=‘192.168.0.83‘, master_user=‘slave1‘, master_password=‘789‘, MASTER_LOG_FILE=‘mysql-bin.000006‘, MASTER_LOG_POS=107; 善于使用?查看详细选项 mysql> ? change master to 常用选项: master_host=‘192.168.137.26‘ 远程主(Master)机IP master_user=‘slave4‘, 登录远程主(Master)机 用户名 master_password=‘789‘, 登录远程主(Master)机 密码 不常用选项: MASTER_LOG_FILE=‘mysql-bin.000009‘ 指定从哪个binlog文件复制(如果不加此参数默认是最早的binlog日志) MASTER_LOG_POS=107 指定从哪个binlog文件的哪个pos点开始复制(如果不加此参数默认是最早的pos点) MASTER_PORT=3306, 远程主(Master)机端口 MASTER_HEARTBEAT_PERIOD=60 多长时间探测一次主服务器是否在线 单位:秒 MASTER_CONNECT_RETRY=10; 无法连接主服务器的时候重试连接的间隔时间 单位:秒 3.启动IO线程和SQL线程,生成master.info文件,查看从(Slave)机状态: mysql> start slave; mysql> show slave status G 如果看到如下状态说明同步成功: Slave_IO_Running: Yes Slave_SQL_Running: Yes Seconds_Behind_Master: 0 4.报错处理!如果“Slave_SQL_Running: No”,程序可能在slave上进行了写操作,也可能是slave机器重起后,事务回滚造成的。 解决方法一: mysql> stop slave; mysql> set GLOBAL SQL_SLAVE_SKIP_COUNTER=1; mysql> start slave; mysql> show slave status G; 解决方法二: 主(Master)上: mysql> show master status; //主机上查看最新的binlog日志名及pos点 从(Slave)机上: mysql> stop slave; //从机停掉slave服务 mysql> change master to master_host=‘192.168.137.26‘, master_user=‘slave4‘, master_password=‘789‘, MASTER_LOG_FILE=‘主机最新binlog日志名‘, MASTER_LOG_POS=最新pos点; mysql> start slave; mysql> show slave status G;
以上是关于mysql 主从复制的主要内容,如果未能解决你的问题,请参考以下文章