MYSQL的binlog问题
发布网友
发布时间:2022-04-21 08:31
我来回答
共4个回答
热心网友
时间:2022-04-07 16:37
当启动Binlog后,事务会产生Binlog Event,这些Event被看做事务数据的一部分。因此要保证事务的Binlog Event和InnoDB引擎中的数据的一致性。所以带Binlog的CrashSafe要求MySQL宕机重启后能够保证:
- 所有已经提交的事务的数据仍然存在。
- 所有没有提交的事务的数据自动回滚。
- 所有已经提交了的事务的Binlog Event也仍然存在。
- 所有没有提交事务没有记录Binlog Event。
这些要求很好理解,如果重启后数据还在,但是Binlog Event没有了,就没办法复制到其他节点上了。如果重启后,数据没了,但是Binlog Event还在,那么不存在的数据就会被复制到其他节点上,从而导致主从的不一致。
为了保证带Binlog的CrashSafe,MySQL内部使用的两阶段提交(Two Phase Commit)。
热心网友
时间:2022-04-07 17:55
我汗,你真敢删啊。只删binlog文件有什么用啊,从库都记录好了从哪份binlog的哪个position开始继续读,结果被你删了,当然找不到后续的Master event啦。
正确的操作:
1.mysqlmp -uxxx -p --master-value=2 --all-databases >/xxx/xxx.dmp
2.cd /xxx; grep xxx.dmp 'CHANGE_MASTER_TO'
记录下binlog 和position
3.从库上 复制一份xxx.dmp,mysql -u xxx -p </yyy/xxx.dmp
4.从库上,进入数据库,输入命令
change master to master_host='主库IP地址',master_port=xxxx,master_user='xx',master_password='xx',master_log_file='mysql-bin.xxxxxx',master_log_pos=xxxxxxxxxxxx;
master_log_file 和master_log_pos就是第二步记录下的值啦。
最后start slave就好了。
binlog文件可不能乱删啊。
热心网友
时间:2022-04-07 19:30
使用二进制日志来完成同步,把各客户机的二进制日志还原为SQL文件,然后分别在服务器数据库上执行一遍,最后使用服务器数据库覆盖各客户机数据库即可。
mysqlbinlog.exe:用于处理二进制日志文件的实用工具。服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。
c:\> mysqlbinlog [options] log-files...
例如,要想显示二进制日志binlog.000003的内容,使用下面的命令:
c:\> mysqlbinlog binlog.0000003
输出包括在binlog.000003中包含的所有语句,以及其它信息例如每个语句花费的时间、客户发出的线程ID、发出线程时的时间戳等等。
热心网友
时间:2022-04-07 21:21
应该reset一下日志就可以