MySQL 备份之 mysqldump
mysqldump
mysqldump工具备份:
本质:导出的是SQL语句文件
优点:不论是什么存储引擎,都可以用mysqldump备成SQL语句
缺点:速度较慢,导入时可能会出现格式不兼容的突发情况,无法做增量备份和累计增量备份
提供三种级别的备份,表级,库级和全库级
Usage: mysqldump [OPTIONS] database [tables]
OR mysqldump [OPTIONS] --databases [OPTIONS] DB1 [DB2 DB3...]
OR mysqldump [OPTIONS] --all-databases [OPTIONS]
说明:
如果备份对象下的数据库绝大多数都是myisam类型表,为了保证数据的一致性,备份时需要锁定表
如果是针对innodb的表进行备份由于innodb是事务型的引擎,会话与会话之间是隔离的,所以备份的时候不影响数据库的正常使用,无需锁表
--lock-tables 如果备份的数据库里的表与其他库没有关系的话,那么只需要锁定该库下的表就可以了
--lock-all-tables 如果备份的数据库里的表与其他库有关系的话,那么需要锁定整个mysql数据库的所有库下的所有表
--flush-logs, -F 开始备份前刷新日志
--flush-privileges 备份包含mysql数据库时刷新授权表
--lock-all-tables, -x MyISAM 一致性 服务可用性
--lock-tables, -l 备份前锁表
--single-transaction 适用InnoDB引擎,保证一致性 服务可用性
--master-data=1|2 该选项将会记录binlog的日志位置与文件名并追加到文件中
表级备份 / 恢复
表级备份:
[root@Admin ~]# mysqldump -p123 db01 table01 > /tmp/mysqlback/table01.sql # 备份单个表
[root@Admin ~]# mysqldump -p123 db01 table01 table02 > /tmp/mysqlback/table01_02.sql # 备份多个表
表级恢复:
[root@Admin ~]# mysql -p123 db01 < /tmp/mysqlback/table01.sql
或者在mysql数据库内使用source命令来执行外部的sql文件
mysql> source /tmp/mysqlback/table01.sql
库级备份 / 恢复
库级备份:
[root@Admin ~]# mysqldump --databases db01 -p123 > /tmp/mysqlback/db01.sql # 备份单个库
[root@Admin ~]# mysqldump --databases db01 db02 -p123 > /tmp/mysqlback/db01_02.sql # 备份多个库
表级恢复:
[root@Admin ~]# mysql -p123 < /tmp/mysqlback/db01.sql
mysql> source /tmp/mysqlback/db01_02.sql
说明: 不要从操作层面删除任何一个库和任何一个表,如果真的这么做了,那么恢复的时候会恢复失败,因为mysql库里面不仅记录了用户信息等还记录了数据库表结构等。从操作层面删除,而mysql库里面并不知道。 所以坚决不能从操作层面删除任何一个库和任何一个表。
全库备份 / 恢复
全库级备份:
考虑到数据库有innodb,也有其他类型的表,那么就只能锁表备份
[root@Admin ~]# mysqldump -p123 --lock-tables --all-databases > /tmp/mysqlback/alldb.sql
全库级恢复:
[root@Admin ~]# mysql -p123 < /tmp/mysqlback/alldb.sql
mysql> source /tmp/mysqlback/alldb.sql
注意:如果是在终端直接在数据目录里面将数据全部删除, 再恢复数据的话就需要初始化才能恢复。
mysqldump+binlog
完全备份(mysqldump)+增量备份(binlog)
适用于中小型数据库;通过结合二进制日志文件,把数据库恢复到最新的状态
二进制日志默认会记录下所有对数据库变化的操作
二进制日志文件中会记录某个操作的详细SQL语句,还有执行的时候环境,时间,以及该记录在二进制日志文件的起始和结束点pos值
error log # 错误日志,记录mysql服务端在运行时产生的错误信息,以及mysql启动和关闭的日志信息(排错)
slow log # 慢查询日志,慢查询时间阀值,以秒为单位,如果超过这个阀值就是慢查询(调优)
bin log # 二进制日志 ,记录对数据库增、删、改的SQL操作,可以使用这个日志做增量备份(备份)
Relay log # 中继日志(主从复制日志)从机器上从主机器复制过来日志,根据日志来同步数据(复制)
配置二进制日志
查看二进制日志是否开启:
mysql> show variables like '%log_bin%';
+---------------------------------+--------------------------+
| Variable_name | Value |
+---------------------------------+--------------------------+
| log_bin | OFF |
| log_bin_basename | /data/DB/mysql-bin |
| log_bin_index | /data/DB/mysql-bin.index |
| log_bin_trust_function_creators | ON |
| log_bin_use_v1_row_events | OFF |
| sql_log_bin | ON |
+---------------------------------+--------------------------+
6 rows in set (0.00 sec)
log_bin |OFF 关闭 ON 开启
修改配置文件
[root@Admin ~]# vim /etc/my.cnf
log-bin=/var/lib/mysql/mysql56-bin.log
log-bin (可直接这样写就ok)