MySQL主从同步及错误1146解决办法

在实际使用MySQL的时候我们有时要增加一些新的库进行主从同步,所以可以通过修改my.cnf文件以及在主库上添加用户连接权限就可以实现主从同步,而在做主从同步的时候碰到几个问题这里就和大家说一下,至于如何构建主从同步这里就不再多说了,相信在网上能找到一大堆,这里就稍稍提几个关键点,在从库下的my.cnf添加如下几行:

server-id = 2#一般主库是1,从库可以除1以外的数字
log-bin=mysql-bin#从库是读取主库logbin文件的,这行一定要加,不然会报错
report-host=192.168.168.253#主库的ip
relay-log = mysql-relay-bin
replicate-wild-do-table=database.%#需要同步主库里的某一个库,多个库可自行添加

在主库里添加用户使从库可连接,这里需要注意的是给权限时密码必须是密文,不然会报错误1372,我们可以用

mysql>select password('password');#生成41位的十六进制数
mysql> GRANT REPLICATION SLAVE ON *.* TO 'test_backup'@'192.168.168.254' IDENTIFIED BY PASSWORD '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19';#要这样给权限

在主库权限给好后从库里去修改连接主库的状态值

change master to master_host='192.168.168.253',master_user='test_backup',master_password='test_backup',master_log_file='mysql-bin.XXXXXX',master_log_pos=XXX;
slave start;

然后show slave status\G看下面2项目是yes就行了

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

按理说主从同步到这里应该是结束了,但是,我在主库里查询以一下语句,再来看从库的状态时就会报错1146,刚刚开始还以为是库表文件损坏但是都没有用,于是上网去找很多方法都没有用到后来想到报错是从库里找不到相应的表,与是就看下从库里果然没有任何库,因为主从同步只会同步并不会新建库,于是就到主库里导出要同步的库

mysqldump -uroot -p database > database.sql

在从库里建同名的库并导入,注意要和主库里用同样的字符集

mysql> CREATE DATABASE `DATABASE` CHARACTER SET utf8 COLLATE utf8_general_ci
mysql>source database.sql#如果不在database.sql路径进入mysql要写database.sql的路径
mysql>slave stop;

再次调整最新的状态值再slave start,这样主从同步就做好了。

相关推荐