目录

MySQL备份

概述

本文简述一下 MySQL 在运维过程中备份的流程。

操作

MySQL 修改数据路径。

 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
sudo service mysql stop
cd <path>
mkdir mysqldata

sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
datadir=<path>/mysqldata/mysql
tmpdir=/tmp

sudo vim /etc/apparmor.d/usr.sbin.mysqld
/var/lib/mysql/r -> <path>/mysqldata/mysql/ r,
/var/lib/mysql/** rwk -> <path>/mysqldata/mysql/** rwk,
sudo /etc/init.d/apparmor reload

sudo cp -R -p /var/lib/mysql <path>/mysqldata/

sudo service mysql start

# 修改数据库配置,另外参考其他备机的配置(例如max_connections,要同步的数据库等)
# 根据mysql配置中的log_bin及relay_log中指定的目录,如果不存在则创建相应目录(例如/data/mysqldata/log),并chown成mysql.mysql

# 启动备机mysql服务
sudo service mysql start

# 主机上执行
mysqldump -hx.x.x.x -uxxx -pxxxxxx --single-transaction --master-data=2 --databases <db1> <db2> ...  > <file>.sql

# 说明:--single-transaction保证导出的所有表数据是一致的(前提导出的表都是innodb的,如果不是,则此参数无效,需使用其他参数)               --master-data 指定导出的sql文件中包含change master的信息(master_log_file和master_log_pos),如果=2则指定change master信息作为注释出现,而=1则作为正式语句出现。因为还要指定master_host、master_user、master_password等信息,这里用=2,后续再手动执行change master

# 备机上执行
source <file>.sql

# 备机上执行
# change master to master_host='x.x.x.x', master_user='uuu', master_password='*****', master_log_file='xxx', master_log_pos=xxx
# (master_log_file和master_log_pos根据<file>.sql中的注释设置)

# 备机上执行 start slave (之后执行show slave status确认状态正常)

参考文档

警告
本文最后更新于 2017年2月1日,文中内容可能已过时,请谨慎参考。