1、上次刚写完文章,发现自己手欠了一下,在备份机上slave开启的情况下,删除了一张表!结果怎样启动slave,Slave_SQL_Running总是No。
分析问题出现的原因:
当建立了主从复制以后MySQL数据库的从库中不能做cud操作也就是增删改的操作其中包括数据库、表、触发器、函数、过程等等所有的内容。
解决思路:
当出现这个问题的时候,我查询了一下主机数据库中的master的状态,发现是这样的
mysql> show master status\G;
*************************** 1. row **************************
File: mysql-bin.000002
Position: 4553
Binlog_Do_DB:
Binlog_Ignore_DB:
Executed_Gtid_Set:
1 row in set (0.00 sec)
ERROR:
No query specified
而原来的master的file是mysql-bin.000001,position是451。因此可以推断是slave的信息与master的已经不匹配了,所以需要从新配置slave。
先将slave停掉
mysql>stop slave;
mysql>change master to master_host='192.168.1.1',
->master_user='dba',
->master_password='root',
->master_log_file='mysql-bin.000002',
->master_log_pos=4553;
2、由于主从主机的分离,所以在主机的一些DBMS工具中建表,建库时一定注意,虽然MySQL本身不区分大小写但是数据库名,表名等如果用大写的会出现这样一个问题:
在Navicat上建一个Vacant表,并增添数据,到从库上去查询,结果发现没有同步。于是查询日志发现错误说:无法找到vacant表,实际上已经有一张Vacant表了只是大小写不一致。
于是到Windows平台上做实验,发现不区分大小写表名,而到linux下却区分。
因为在不同平台的大小写敏感度是不一样的,所以得出一个结论MySQL的复制中最好统一用小写字母。
总结一下:
(1)主从复制的数据库上不能在从机备份库slave开启的情况下进行增删改的操作。如果在slave关闭的情况下进行了修改,必须在开启slave之前手动同步主从数据。
(2)linux平台区分名字(库名、表名等)的大小写,而windows平台不区分,因此建议统一用小写命名。