重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
从服务上,停掉slave数据库。主服务器上,导出新数据库。主服务器上,修改my.cnf文件,添加新库到binlog-do-db参数,重启mysql。在导出的newdb.sql里面查找当前的日志文件以及位置(changemasterto)然后让slave服务器执行到这个位置。startslaveuntilMASTER_LOG_FILE=”mysql-bin.000001“,MASTER_LOG_POS=1222220。其中MASTER_LOG_FILE以及MASTER_LOG_POS在导出的数据库newdb.sql顶部位置查找。导入新库到从服务器上。最后startslave即可。
成都创新互联公司拥有一支富有激情的企业网站制作团队,在互联网网站建设行业深耕10多年,专业且经验丰富。10多年网站优化营销经验,我们已为上1000家中小企业提供了成都做网站、成都网站建设解决方案,按需设计,设计满意,售后服务无忧。所有客户皆提供一年免费网站维护!
这种方法也同样适用于某个数据库或者某个数据表不同步的情况,比如主从数据库有一个表由于某些原因数据不一致,那么上面的方法只需要去掉重启数据库一步,其他的操作基本一样。
今天发现Mysql的主从数据库没有同步
先上Master库:
mysqlshow
processlist;
查看下进程是否Sleep太多。发现很正常。
show
master
status;
也正常。
mysql
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
再到Slave上查看
mysql
show
slave
status\G
Slave_IO_Running:
Yes
Slave_SQL_Running:
No
可见是Slave不同步
下面介绍两种解决方法:
方法一:忽略错误后,继续同步
该方法适用于主从库数据相差不大,或者要求数据可以不完全统一的情况,数据要求不严格的情况
解决:
stop
slave;
#表示跳过一步错误,后面的数字可变
set
global
sql_slave_skip_counter
=1;
start
slave;
之后再用mysql
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
ok,现在主从同步状态正常了。。。
方式二:重新做主从,完全同步
该方法适用于主从库数据相差较大,或者要求数据完全统一的情况
解决步骤如下:
1.先进入主库,进行锁表,防止数据写入
使用命令:
mysql
flush
tables
with
read
lock;
注意:该处是锁定为只读状态,语句不区分大小写
2.进行数据备份
#把数据备份到mysql.bak.sql文件
[root@server01
mysql]#mysqldump
-uroot
-p
-hlocalhost
mysql.bak.sql
这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失
3.查看master
状态
mysql
show
master
status;
+-------------------+----------+--------------+-------------------------------+
|
File
|
Position
|
Binlog_Do_DB
|
Binlog_Ignore_DB
|
+-------------------+----------+--------------+-------------------------------+
|
mysqld-bin.000001
|
3260
|
|
mysql,test,information_schema
|
+-------------------+----------+--------------+-------------------------------+
1
row
in
set
(0.00
sec)
4.把mysql备份文件传到从库机器,进行数据恢复
#使用scp命令
[root@server01
mysql]#
scp
mysql.bak.sql
root@192.168.128.101:/tmp/
5.停止从库的状态
mysql
stop
slave;
6.然后到从库执行mysql命令,导入数据备份
mysql
source
/tmp/mysql.bak.sql
7.设置从库同步,注意该处的同步点,就是主库show
master
status信息里的|
File|
Position两项
change
master
to
master_host
=
'192.168.128.100',
master_user
=
'rsync',
master_port=3306,
master_password='',
master_log_file
=
'mysqld-bin.000001',
master_log_pos=3260;
8.重新开启从同步
mysql
stop
slave;
9.查看同步状态
mysql
show
slave
status\G
查看:
Slave_IO_Running:
Yes
Slave_SQL_Running:
Yes
好了,同步完成啦。
我也遇到了这个问题,我是这样解决的:
第一show variables like '%server_id%';看看是不是没有设置成功
第二看看是不是数据库的版本不同,