mysql逻辑备份完成备库搭建

Posted by Vincent on September 13, 2012

场景:
当前1主1备,MM结构
master A:192.168.0.1:3306
slave B:192.168.0.2:3306

要搭建新的一主一备用于替换老的机器
master C:192.168.0.3:3306
slave D:192.168.0.4:3306

1. 先搭建好C->D的复制,做成MS

2. 做逻辑备份
@B:192.168.0.2:3306

--记录主库position点
[cc lang='sql']stop slave;
show slave status\G

root@localhost : (none) 12:03:50> show slave status\G
*************************** 1. row ***************************
Slave_IO_State:
Master_Host: 192.168.0.1
Master_User: repl
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.001487
Read_Master_Log_Pos: 257348319
Relay_Log_File: mysql-relay-bin.004637
Relay_Log_Pos: 368556686
Relay_Master_Log_File: mysql-bin.001477
Slave_IO_Running: No
Slave_SQL_Running: No
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table:
Replicate_Wild_Ignore_Table:
Last_Errno: 0
Last_Error:
Skip_Counter: 0
Exec_Master_Log_Pos: 368556541
Relay_Log_Space: 5626137334
Until_Condition: None
......[/cc]

记录下这两个值,用户新备库从老主库做恢复,而不是从老备库做恢复
[cc lang='sql']Relay_Master_Log_File: mysql-bin.001477
Exec_Master_Log_Pos: 368556541[/cc]

show master stastus;
可以不用执行,因为备库的position值在dump的文件中存在

开始备份
[cc lang='sql']mysqldump -uroot -pxxx --master-data=2 --single-transaction --all-database > all.sql &[/cc]

--master-data=2 记录position值,如果是1,表示在恢复后直接应用该记录
--single-transaction 避免lock tables

3. 在新主库做恢复
@C:192.168.0.3:3306

mysql -uroot < all.sql > /tmp/import.log &[/cc]

指向主库做恢复

[cc lang='sql']change master to
master_host='192.168.0.1',
master_port=3306,
master_user='slave',
master_password='slave',
master_log_file='mysql-bin.001477',
master_log_pos=368556541;[/cc]

4. 升级下mysql版本,如需要
[cc lang='sql']/u01/mysql/bin/mysql_upgrade -uroot [/cc]

5. 完成追赶后,做应用的切换,再把主机C指向D

change master to ...

做备份需要的权限:
[cc lang='sql']GRANT REPLICATION SLAVE ON *.* TO 'slave'@'%' IDENTIFIED BY '******';[/cc]
关于字符集:
Utf8表数据通过gbk转化导到文件中,部分数据损坏,重新入库数据损坏
Utf8表数据通过Utf8转化导到文件中,无数据损坏,重新入库数据正常
Utf8表数据通过latin1转化导到文件中,无数据损坏,重新入库数据正常
加参数 --default-character-set=utf8 可以加在mysqlduamp或者load中


This work is licensed under a CC A-S 4.0 International License.