备份和恢复:php
逻辑备份:mysqldump, mydumper, phpMyAdminmysql
Schema和数据存储一块儿、巨大的SQL语句、单个巨大的备份文件sql
mysqldump: 客户端,经过mysql协议链接至mysqld; 建议使用较小的数据集,不建议使用较大的备份数据集。shell
mysqldump [options] [db_name [tbl_name ...]]数据库
备份的数据集服务器
-A, --all-databases #备份全部数据库网络
-B db_name,... #备份指定的数据库app
--databases db_name,...socket
-x, --lock-all-tables:锁定全部库的全部表,建议备份全部库使用;ide
-l, --lock-tables:对于每一个单独的数据库,在启动备份前锁定其全部表,建议备份指定库使用;
--single-transaction:启动一个大的单一事务实现备份
shell> mysqldump [options] db_name [tbl_name ...] #备份单个库,或库指定的一个或多个表
shell> mysqldump [options] --databases db_name ...
shell> mysqldump [options] --all-databases
shell># mysqldump -uroot --databases test zabbix > /root/test.sql #备份数据库命令
shell># mysql < heoll.sql #执行恢复操做。
MyISAM:支持温备:锁定备份库,然后启动备份操做;
MyISAM, InnoDB: 温备
-x, --lock-all-tables:锁定全部表
-l, --lock-tables:锁定备份的表
InnoDB:支持热备
--single-transaction:启动一个大的单一事务实现备份
-B, --databases db_name1 db_name2 ...:备份指定的数据库
-C, --compress:压缩传输;
命令的语法格式:
mysqldump [OPTIONS] database [tables]:备份单个库,或库指定的一个或多个表
mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]:备份一个或多个库
mysqldump [OPTIONS] --all-databases [OPTIONS]:备份全部库
其它选项:
-E, --events:备份指定数据库相关的事件调度器,event,scheduler;
-R, --routines:备份指定数据库相关的全部存储过程和存储函数;
--triggers:备份表相关的触发器;
--master-data[=#]:value
shell> mysqldump --all-databases --master-data=2 > all_databases.sql
shell> mysqldump --all-databases --flush-logs --master-data=2 > all_databases.sql
shell> mysqldump -uroot --all-databases --lock-all-tables --master-data=2 > /root/all.sql
1:记录CHANGE MASTER TO语句;此语句不被注释;
2:记录为注释语句;
--flush-logs, -F:锁定表以后执行flush logs命令; #二进制日志滚动操做
二进制日志恢复数据,经过二进制日志进行时间点还原。
# mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001
# mysqlbinlog --start-position=245 /var/lib/mysql/mysql-bin.000001 > incre.sql
mysql -hHOST -u USER -p PASSWORD < incre.sql #将备份的二进制文件导入至mysql中
注意:二进制日志文件与数据文件不该该放置于同一磁盘;
物理备份:数据文件的时间一致性?
冷备:
几乎热备:lvm2快照
一、请求锁定全部表:
mysql> FLUSH TABLES WITH READ LOCK;
二、记录二进制日志文件及事件位置:
mysql> FHULS LOGS;
mysql> SHOW MASTER STATUS;
shell# mysql -e 'SHOW MASTER STATUS' > /root/pos-`date +%F>`
三、建立快照:
lvcreate -L SIZE -s -p r -n NAME(卷名) /dev/VG_NAME/LV_NAME
四、释放锁:
mysql> UNLOCK TABLES
五、挂载快照卷,复制数据进行备份;
cp, rsync, tar等命令复制数据;
六、备份完成以后,删除快照卷;
七、制定好策略,经过原卷备份二进制日志;
两种备份和恢复方式:
mysqldump,lvm2+cp(tar)
mysqldump作的备份,数据还原时,是否会产生二进制日志?
mysql> SET SESSION sql_log_bin=0;
mysql> SOURCE /path/from/somefile.sql;
mysql> SET SESSION sql_log_bin=1;
Xtrabackup:
percona, www.percona.com #MySQL咨询公司
Percona Server为 MySQL 数据库服务器进行了改进,在功能和性能上较 MySQL 有着很显著的提高
innobackupex: 客户端工具, 以mysql协议连入mysqld,不支持离线备份
增量备份命令:# innobackupex --incremental /backups/ --incremental-basedir=/backups/2019-2-17/
--user=
--password=
# innobackupex --apply-log /backups/2019-2-17 #数据还原的整理彻底备份命令。
# innobackupex --apply-log --redo-only /backups/2019-02-27_13-53-43/ #数据还原的整理彻底备份命令。
# innobackupex --apply-log --redo-only /backups/2019-02-27_13-53-43/ --incremental-dir=/backups/2019-2-17/ #整理增量备份命令
上述操做将增量备份合并的彻底被上,这时能够经过上述备份进行数据恢复。
# innobackupex --apply-log --export /backups/2019-2-17/ #执行导出某张表。
# innobackupex --copy-back /backups/2019-2-17 #数据还原命令,使用backup下的全部内容进行数据恢复。
完整备份策略:完整备份 + 增量备份 + 二进制日志
注意:
一、将数据和二进制文件放置于不一样的设备;二进制日志也应该周期性地备份;
二、将数据和备份分开存放,建议不在同一设备、同一主机、同一机房、同一地域;
三、每次灾难恢复后都应该当即作一次彻底备份;
四、备份后的数据应该周期性地作还原测试;
从备份中恢复应该遵循的步骤:
一、中止MySQL服务器;
二、记录服务器配置和文件权限;
三、将备份恢复到MySQL数据目录;此步骤依赖具体的备份工具;
四、改变配置和文件权限;
五、以限制方式启动MySQL服务器:好比经过网络访问;
[mysqld]
skip-networking
socket=/tmp/mysql-recovery.sock
六、载入额外的逻辑备份;而检查和重放二进制日志;
七、检查已经还原的数据;
八、以彻底访问模式重启服务器;
其它的备份工具:
SELECT ... INTO OUTFILE ''
LOAD FILE
mylvmbackup