方法一:
物理备份
step1:关闭mysqld服务,拷贝数据库的数据目录到本地的备份目录
systemctl stop mysqld
cp/tar -r /var/lib/mysql/* 备份目录
step2:scp传递本地的备份目录内容给目标主机
scp -r 备份目录/* 远程主机的备份目录
step3:关闭远程主机的mysqld,将备份目录下的内容覆盖拷贝到自己本机的数据目录下
systemctl stop mysqld
rm -rf /var/lib/mysql/*
cp -r 备份目录/* /var/lib/mysql
step4:更改数据目录的所有者和所属组
chown -R mysql:mysql /var/lib/mysql
step5:开启mysqld服务
systemctl start mysqld
方法二:mysqldump
mysqldump -u用户 -p密码 -A 或 --all-databases(库也会被备份) > 备份文件.sql
-B 数据库1 数据库2(库也会被备份)
单个数据库(库不会被备份,恢复时先创建库)
数据库 表 (库不会被备份,恢复时先创建库)
备份和恢复时都会锁表
mysqldump --opt --skip-locak-tables //在不锁表的情况下进行数据的导入导出
注意:
导入单库或是单表时,库必须在目标数据库中结构已经存在(事先创建)
导入多个或全部的库,会连同库一并导入,无需创建
恢复:
方法一:mysql -u用户 -p密码 数据库
方法二:mysql -u用户 -p密码
> source 备份文件.sql;
方法三:使用mysql服务自带的binlog日志文件实现备份和恢复
启动binlog日志:【记录所有更改数据的操作】
server_id=数字//唯一性【1-255】
log-bin=/路径/文件名//默认在/var/lib/mysql,若自定义路径,则自定义的路径的属性mysql:mysql
max_binlog_size=大小//一个文件最大能存储多少
产生:/var/lib/mysql
日志文件:文件名 .000001
索引文件: 文件名.index
>show master status\G; //查看是否开启了binlog日志
手动生成binlog日志文件:
方法1.重启mysqld服务,重启一次生成一次
方法2.>flush logs;
方法3.mysqldump -u用户 -p密码 --flush-logs 库名 >备份文件.sql
方法4.#mysql -u用户 -p密码 -e 'flush logs'//在linux命令行执行mysql语句
>systemctl linu命令//在mysql里面执行Linux系统命令
删除已有的日志:
方法一:
>purge master logs before '日志名.000005' //删除000005之前的日志
>purge master logs to '日志名.000006' //删除000006的日志
>reset master;
方法二:
查看日志文件内容:
mysqlbinlog [选项] binlog日志文件名
选项:
--start-datetime="yyyy-mm-dd hh:mm:ss"
--stop-datetime="yyyy-mm-dd hh:mm:ss"
--start-position=偏移量
--stop-position=偏移量 //表中的数据发生变化时才会更改偏移量
查看日志格式:show variables like "binlog_format";
statement:记录每一条修改数据的sql语句
row:不记录sql语句,仅仅保存哪条记录都修改
mixed:混合使用
/etc/my.cnf --->binlog_format="格式类型"
使用日志文件恢复数据:mysqld服务无需关闭
mysqlbinlog 【选项】 binlog日志文件名|mysql -u用户 -p密码
方法四:innobackupex
step1:安装libev-4.15-1.el6.rf.x86_64.rpm和percona-xtrabackup-24-2.4.7-1.el7.x86_64
rpm -ivhlibev-4.15-1.el6.rf.x86_64.rpm
yum -y install percona-xtrabackup-24-2.4.7-1.el7.x86_64
使用结构:
innobackupex [选项]
全量备份数据:
innobackupex --user 用户名 --password 密码 备份文件的存放路径(手动创建) --no-timestamp(不启动日期命令作为子目录)
全量恢复数据:
step1:停止mysqld服务
systemctl stop mysqld
rm -rf /var/lib/mysql/*
step2:准备还原数据
innobackupex --apply-log 备份文件名
step3:恢复数据
innobackupex --copy-back 备份文件名
step4:修改归属
chown -R mysql.mysql /var/lib/mysql
step5:重启mysqld服务
systemctl start mysqld
基于全量备份的基础上增量备份:
增量备份数据:
innobackupex --user 用户 --password 密码 --incremental 增量备份文件的存放路径(手动创建) --incremental-basedir=目录路径(是基于那个全量备份目录增量的) --no-timestamp
恢复数据:
step1:停止mysqld服务
systemctl stop mysqld
rm -rf /var/lib/mysql/*
step2:准备还原数据,合并日志
innobackupex --apply-log --redo-only 全量备份文件名 //将备份文件的备份类型改为log-applied
innobackupex --apply-log --redo-only --incremental-dir=增量备份文件 全量备份文件 //将增量备份文件中的内容合并到全量备份文件中
step3:恢复数据
innobackupex --copy-back 全量备份文件名
step4:修改归属
chown -R mysql.mysql /var/lib/mysql
step5:重启mysqld服务
systemctl start mysqld
备份单个的库:
innobackupex --user 用户 --password 密码 --databases='库名' 目录路径(手动创建) --no-timestamp