MySql主从复制遇到的坑
mysql主从同步的工作原理:
从库数据库目录下的文件:master.info 记录主库信息
主机名-relay-bin.XXXX: 中继日志文件,记录主库上执行过的sql命令
主机名-relay-bin.index 索引文件:记录当前已有的中继日志文件
relay-log.info 中继日志文件:记录当前使用的中继日志信息
从库数据库下 的文件:
记录主库 信息:
[root@mysql_server_52 mysql]# cat /var/lib/mysql/master.info
中继日志文件:主库上执行的sql命令:
mysql_server_52-relay-bin.000001
mysql_server_52-relay-bin.000002
[root@mysql_server_52 mysql]# mysqlbinlog mysql_server_52-relay-bin.000002| grep insert
insert into bbsdb.t1 values(18)
insert into bbsdb.t1 values(19)
中继日志索引:
mysql_server_52-relay-bin.index
中继日志文件:记录当前正在使用的中继日志文件
relay-log.info
**IO和SQl线程的作用:**
从库的IO线程:把主库 上执行的sql命令,记录到从机的中继日志文件中
从库的SQL线程:执行本机的中继日志中的 SQL命令,把数据写入数据库
IO失败的原因:
从库连接失败 (ping grant firewall selinux ),change master to
Last_IO_Error:
SQL线程的出错原因:
执行本机中继日志文件,对应 的库或者表没有
Last_SQL_Errno
设置从库暂时不同步
mysql> stop slave;
恢复从机为独立的数据库
[root@mysql_server_52 mysql]# rm -rf /var/lib/mysql/master.info
[root@mysql_server_52 mysql]# systemctl restart mysqld
[root@mysql_server_52 mysql]# rm -rf /var/lib/mysql/mysql_server_52-relay-bin.* /va
1.主从复制:
1.1主库授权从库
mysql> grant replication slave on . to user@"%" identified by “123456”;
mysql> show master status;
±------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±------------±---------±-------------±-----------------±------------------+
| db51.000001 | 154 | | | |
±------------±---------±-------------±-----------------±------------------+
1.2修改主库的配置文件
]vim /etc/my.cnf
[mysqld]
server_id=52 #数据库的标识(必须是和从库不一样,id号随意)
log-bin=db52 #日志文件名字(可以自己编辑名字)
binlog-format=“mixed” #混合模式复制
log_slave_updates #你理解成开启复制模式就行
:wq
]# systemctl restart mysqld
1.3 管理员登录从库指定主库信息
~]# mysql -uroot -p123456
mysql> change master to
-> master_host=“192.168.4.51”, #这个是填写主库的IP而不是从库的
-> master_user=“user”,
-> master_password=“123456”,
-> master_log_file=“db51.000001”, #记录主库的binog日志
-> master_log_pos=154; #偏移量
启动slave进程
mysql> start slave;
查看进程状态信息:
mysql> show slave status \G;
Slave_IO_Running: Yes #线程记录主库的日志
Slave_SQL_Running: Yes #写入自己的本地库
行了 ok了!!!!————》想解决报错信息看别的文章!!!