持续创作,加速成长!这是我参与「掘金日新计划 · 10 月更文挑战」的第6天,点击查看活动详情
数据备份类型:包括完全备份和部分备份。完全备份:顾名思义备份整个数据库;部分备份是备份一部分数据集,包括增量备份和差异备份,前者自上次备份以来的改变数据的备份;后者是自上次完全备份后改变数据的备份。
需要备份的东西包括:数据、二进制日志、Innodb事务日志、代码、服务器配置文件等。
备份工具策略:cp,tar物理备份、mysqldump备份、lvm2备份、xtrabackup备份等。
mysqldump是MySQL提供的一个非常有用的数据库备份工具。mysqldump命令执行时,可以将数据库备份成一个文本文件,该文件中实际上包含多个CREATE和INSERT语句,使用这些语句可以重新创建表和插入数据。
- 查出需要备份的表的结构,在文本文件中生成一个CREATE语句
- 将表中的所有记录转换成一条INSERT语句。
- 基本语法:mysqldump –u 用户名称 –h 主机名称 –p密码 待备份的数据库名称[tbname, [tbname...]]> 备份文件名 称.sql
一、备份所有数据库
使用--all-databases或-A参数:
mysqldump -uroot -pxxxxxx --all-databases > all_database.sql
mysqldump -uroot -pxxxxxx -A > all_database.sql
mysqldump -u root -p --all-database > all.sql
mysqldump -h localhost -P3306 -uroot -p123456 --single-transaction data docid > F:\docid.sql
mysqlcmd = "/usr/bin/mysqldump -h " + HOST + " -P" + PORT + " -u" + USER + " -p" + PWD +
" --single-transaction " + DB + " " + TABLE + " > " + db_backup_dir + "/" + backup_file_name
二、备份部分数据库
使用--databases或-B参数了,该参数后面跟数据库名称,多个数据库间用空格隔开。
1、备份部分数据库
基本语法: mysqldump –u user –h host –p --databases [数据库的名称1 [数据库的名称2...]] > 备份文件名 称.sql
mysqldump -u root -p --databases test student > teststudent.sql
不带--databases的备份语句在生成的.sql文件中没有create database和use 语句,需要手动建立数据库,可能导致数据库名与之前不一致
2、备份数据库的部分表
基本语法:mysqldump –u user –h host –p 数据库的名称 [表名1 [表名2...]] > 备份文件名称.sql
mysqldump -u root -p test a b c > abc.sql
三、数据恢复
mysqldump的恢复也很简单,将备份作为输入执行即可,具体语法如下
mysql -h localhost -P3306 -uroot -p123456 data < F:\xxx.sql
restorecmd = "/usr/bin/mysql -h " + HOST + " -P" + PORT + " -u" + USER + " -p" + PWD + " " + \DB + " < " + db_backup_dir + "/" + backup_file_name
注意,将备份恢复后数据并不完整,还需要将备份后执行的日志进行重做,语法如下: mysqlbinlog binlog-file | mysql -uroot -p
四、mysqlbinlog日志恢复
1、查看log_bin是否开启
show variables like 'log_bin';
2、查看binlog文件列表
show binary logs;
3、查看当前logbin文件的位置戳
show master status;
4、将数据库恢复到位置戳数据
先生成sql文件: mysqlbinlog --start-position=489 --stop-position=696 c:/programs/files/mysql/server/data/mysql-bin.000002 > c:/programs/files/mysql/server/data/489_696.sql
再加载sql文件:source c:/programs/files/mysql/server/data/489_696.sql
5、查看binlog文件的内容
show binlog events in 'mysql-bin.000002'