mysql主从数据库不同步的2种解决方法

mysql主从数据库不同步的2种解决方法,第1张

今天发现Mysql的主从数据库没有同步

先上Master库:

mysql>show

processlist;

查看下进程是否Sleep太多。发现很正常。

show

master

status;

也正常。

mysql>

show

master

status;

+-------------------+----------+--------------+-------------------------------+

|

File

|

Position

|

Binlog_Do_DB

|

Binlog_Ignore_DB

|

+-------------------+----------+--------------+-------------------------------+

|

mysqld-bin000001

|

3260

|

|

mysql,test,information_schema

|

+-------------------+----------+--------------+-------------------------------+

1

row

in

set

(000

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进行数据备份

#把数据备份到mysqlbaksql文件

[root@server01

mysql]#mysqldump

-uroot

-p

-hlocalhost

>

mysqlbaksql

这里注意一点:数据库备份一定要定期进行,可以用shell脚本或者python脚本,都比较方便,确保数据万无一失

3查看master

状态

mysql>

show

master

status;

+-------------------+----------+--------------+-------------------------------+

|

File

|

Position

|

Binlog_Do_DB

|

Binlog_Ignore_DB

|

+-------------------+----------+--------------+-------------------------------+

|

mysqld-bin000001

|

3260

|

|

mysql,test,information_schema

|

+-------------------+----------+--------------+-------------------------------+

1

row

in

set

(000

sec)

4把mysql备份文件传到从库机器,进行数据恢复

#使用scp命令

[root@server01

mysql]#

scp

mysqlbaksql

root@192168128101:/tmp/

5停止从库的状态

mysql>

stop

slave;

6然后到从库执行mysql命令,导入数据备份

mysql>

source

/tmp/mysqlbaksql

7设置从库同步,注意该处的同步点,就是主库show

master

status信息里的|

File|

Position两项

change

master

to

master_host

=

'192168128100',

master_user

=

'rsync',

master_port=3306,

master_password='',

master_log_file

=

'mysqld-bin000001',

master_log_pos=3260;

8重新开启从同步

mysql>

stop

slave;

9查看同步状态

mysql>

show

slave

status\G

查看:

Slave_IO_Running:

Yes

Slave_SQL_Running:

Yes

好了,同步完成啦。

主库的主机关机时,数据只能读不能写,并且从库的主机关机后,数据仍然可读可写,这个不好弄,如果你对lua脚本有所了解,修改mysql-proxy 的读写分离脚本或许可以实现。

不过主库关机时不能访问,并且从库关机仍可读可写,这个不需要配读写分离,这本来就是主从复制的基本能力,从库只是备用的而已。从库关闭后再开启,slave IO线程会自动从中断处二进制日志的位置开始复制主机的二进制日志,slave SQL线程会读取并执行这些二进制日志中的SQL。

总之,不需要特别的配置,这是主从复制的基本能力。

--主机开两个窗口,一个进入mysql,一个是shell

--主机阻断写 *** 作

mysql> FLUSH TABLES WITH READ LOCK;

Query OK, 0 rows affected (000 sec)

mysql>

mysql>

mysql> SHOW MASTER STATUS;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin000002 | 1529881 | openser | mysql,test |

+------------------+----------+--------------+------------------+

1 row in set (000 sec)

--另外一个窗口导出主机数据库

mysqldump -u root -p123456 --opt -R openser > openser20121203sql

--刚才的窗口主机解锁

mysql> UNLOCK TABLES;

Query OK, 0 rows affected (000 sec)

mysql>

--打包数据文件到从机

drop database openser;

create database openser;

mysql -u root -p123456 openser < openser20121127sql

--从机 *** 作

SLAVE STOP;

reset slave;

CHANGE MASTER TO MASTER_HOST='1921682126',

MASTER_USER='repl_user',

MASTER_PASSWORD='123456',

MASTER_LOG_FILE='mysql-bin000002',

MASTER_LOG_POS=1529881;

start slave;

show slave status\G

Mysql55和Mysql56主从同步设置

主服务器(MySQL55)

从服务器(MySQL56)

1、在主库创建从库用户

insert into mysqluser(Host,User,Password) values('localhost','slaveuser',password('123456'));

flush privileges;

grant replication slave on to 'slaveuser' ' identified by '123456' with grant option;

2、修改主库配置文件mycnf

#编辑配置文件,在[mysqld]部分添加下面内容

vi /etc/mycnf

#设置服务器id

server-id=80

#启动MySQ二进制日志系统

log_bin=mysql-bin

#需要同步的数据库名,如果有多个数据库,可重复此参数,每个数据库一行

binlog-do-db=api

#不同步mysql系统数据库

binlog-ignore-db=mysql

#重启MySQL

service mysqld restart

#进入mysql控制台

mysql -u root -p

#查看主库同步状态

show master status\G;

3、修改从库配置文件mycnf(保证主从server-id不一样,一般用ip最后的字段)

vi /etc/mycnf

#设置服务器id

server-id=90

3、从库增加配置

#进入mysql控制台

mysql -u root -p

#停止slave同步进程

stop slave;

#执行同步语句

change master to master_host=' ',master_user='slaveuser',master_password='123456',master_log_file='mysql-bin000001' ,master_log_pos=

#开启slave同步进程

start slave;

#查看从库同步状态

show slave status\G;

以上就是关于mysql主从数据库不同步的2种解决方法全部的内容,包括:mysql主从数据库不同步的2种解决方法、MySQL主从数据库备份,从数据库中断后能否同步到和主数据库一致、mysql主从同步 如何同步已有的数据,等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/sjk/10050515.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-04
下一篇 2023-05-04

发表评论

登录后才能评论

评论列表(0条)

保存