新网创想网站建设,新征程启航
为企业提供网站建设、域名注册、服务器等服务
1. 在有主键或者唯一键的情况下,Slave 重放 Binlog 并不会去比较检索到的记录的每一列是否和BI相同,因此如果 Slave 和 Master 存在数据不一致,会直接覆盖 Slave 的数据而不会报错。
阿合奇网站制作公司哪家好,找创新互联建站!从网页设计、网站建设、微信开发、APP开发、成都响应式网站建设公司等网站项目制作,到程序开发,运营维护。创新互联建站2013年开创至今到现在10年的时间,我们拥有了丰富的建站经验和运维经验,来保证我们的工作的顺利进行。专注于网站建设就选创新互联建站。
2. 在没有主键或者唯一键的情况下,Hash Scan / Hash Scan Over Index 的执行效率 在理论上分析高于 Table Scan 和Index Scan 。
3. 在没有主键或者唯一键的情况下,Slave 选择的二级索引是第一个所有的列都在 BI 中存在的索引,不一定是 Master 执行计划所选择的索引。
换:slave stop
有时候这两顺序不一样,Oracle故意让MySQL不好用的
可能原因:
网络的延迟。
主从两台机器的负载不一致。
max_allowed_packet设置不一致。
key自增键开始的键值跟自增步长设置不一致引起的主从不一致。
mysql异常宕机情况下,如果未设置sync_binlog=1或者innodb_flush_log_at_trx_commit=1很有可能出现binlog或者relaylog文件出现损坏,导致主从不一致。
mysql本身的bug引起的主从不同步。
版本不一致,特别是高版本是主,低版本为从的情况下,主数据库上面支持的功能,从数据库上面不支持该功能。
今天发现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
好了,同步完成啦。