准备工作
主从机里从/usr/share/mysql/拷贝其中的my-huge.cnf 到 /etc/ 并命名为my.cnf。配好主从配置最重要的一点配上errorlog输出位置。
log-error=/var/log/xxx.log
(xxx是你自定义名字)
在从机mysql中root账户下运行show slave status\G
运行完出错
注意不管怎么错,errorlog都会记录。
关键的两个进程简单介绍
- Slave_SQL_Running
一般负责从机执行中继binlog的进程 - Slave_IO_Running
一般负责从机与主机通讯进程
Slave_SQL_Running:no的一般问题
造成原因
- 我是第一次搭同步成功以后对主机行进添加新数据库造成了SQL进程no,从上图最后不难看出从机找不到有新的数据库所以要解决它,必须先把主机上的新数据库的数据(存储过程可以忽略)导入到从机上。我的解决办法只适用于搭建初期,不适合生产时期,另外附上别人的解决办法链接和我自己的解决办法链接,我的解决办法单独写一个专题。
- slave服务没有在从机启动,或者从机的slave进程重启造成事物回滚。后者概率极大。
这个时候想恢复的话,只要停掉slave,set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;再开一下slave就可以了,这个全局变量赋值为N的意思是:
This statement skips the next N events from the master.
This is useful for recovering from
replication stops caused by a statement.
This statement is valid only when
the slave thread is not running. Otherwise,
it produces an error.
- 解决方案
stop slave;
SET GLOBAL SQL_SLAVE_SKIP_COUNTER=1;
START SLAVE;
start slave;
show slave status\G
Slave_io_Running:no的一般问题![在这里插入图片描述]
造成原因
-
网络不通,可以利用ping工具查看
-
slave配置的中继binlog文件名和pos和master里的binlog不匹配
- 解决方案
slave stop;
CHANGE MASTER
TO
MASTER_LOG_FILE='主机的binlog文件名',
MASTER_LOG_POS=master当前的pos;
slave start;
show slave status\G
我的error信息
我的错误信息有两条
-
一条是主机的server-id没配,然后我进去看了下主机的配置发现
server-id=1
没有写在
[mysqld]
中 -
然后第二条是binlog文件和从机的文件名位置信息不匹配。
解决方案
在从机root账户下登录mysql执行如下代码
stop slave;
然后切换到主机,也是root用户登录mysql执行
flush logs;
show master status\G
记录下binlog名字和位置再回到从机操作
切换到从机
执行
CHANGE MASTER
TO
MASTER_HOST='主机IP',
MASTER_USER='xxx',
MASTER_PASSWORD='1xxx',
MASTER_LOG_FILE='File名字',
MASTER_LOG_POS=Position数字;
slave start;
show slave status\G
总结
xxx.cnf配置写的位置很重要*
- mysql版本一致且后台以服务运行
- 确保主机和从机都开启了二进制日志
- 主从都配置在[mysqld]结点下,都是小写
mysql中的cnf配置文件,复制一份到etc下面改名my.cnf
下面为它的结构
[client]
…
[mysqld]
#主服务器的id
server-id=1
#从服务器id除了1以外保证不与其他从服务器重复即可 ---唯一标示!
#server-id=2
#启用二进制日志
log-bin=mysql-bin
#设置不复制的数据库(选配)
binlog-ignore-db=mysql
#设置要复制的数据库(选配)
binlog-do-db=需要复制的主数据库名字(设置一个之前没有的数据库)
#设置logbin的格式
binlog_format=mixed
#设置一个error日志路径
log-error=/var/log/error.log
[mysql]
…
- 一般错误都是围绕主机binlog文件名字和位置与从机设置的Master-logfile&log-pos不匹配造成的,在主机里重启mysql多flush logs几次就行了。
- 最重要的是配置好主从同步以后注意新添加database可能会出现同步失败。最好参照生产环境下的同步移植数据库操作。
- 多看错误日志帮助你快速解决问题,看不懂的把问题黏贴出来,外事不决问google,内事不决问baidu,就酱,bye~