一)mysqldump是线上的逻辑备份。备份的是建表、建库、插入等操作所执行SQL语句。 mysqldump导出的数据时刻迁移到其它数据库的表。它的备份速度要比直接copy慢。
1,备份一个数据库或者一张表
mysql>mysqldump [option] dbname [tablename]
2,同时备份多个数据库语法
mysql>mysqldump [option] --database [dbname1,dbname2]
3,备份服务器上的所有数据
mysql>mysqldump --all-database
4,命令行下
$mysqldump -h 服务器 -u用户名 -p密码 数据库名 > 备份文件.sql
例子:
备份
[mysql@~]$mkdir /backup
[mysql@mysql]$ mysqldump -uroot -p123 -h 1.1.1.20 --all-database > /backup/alldb.sql
[mysql@mysql]$mysqldump -uroot -p123 -h 1.1.1.20 -B school service > /backup/school+service.sql
[mysql@mysql]$ mysqldump -uroot -p123 -h 1.1.1.20 -B school > /backup/school.sql
恢复:
[mysql@backup]$mysql -uroot -p123 -h 1.1.1.20 < /backup/school+service.sql
附)可以再加一个计划任务的小脚本方便自己。
#!/bin/bash
back_dir=/backup
back_date=`date +%F`
user=root
pass=123
if [ ! -d /backup ];then
mkdir -p /backup
fi
mysql -uroot -p123 -e 'flush logs'
for dbname in school service
do
mysqldump -u${user} -p${pass} -B ${dbname} > ${back_dir}/${back_date}_${dbname}.sql
done
二)如果没备份的情况下误删除可以利用mysql的binlog日志文件进行恢复。
恢复前先截断一下日志
mysql -uroot -p123 -e 'flush logs' //截断并产生新的binlog
恢复(一般倒数第二个为最近截断出来的日志):
按文件
mysqlbinlog 倒数第二个binlog |mysql -uroot -p123 整个文件全部执行
按时间:
mysqlbinlog 倒数第二个binlog --start-datetime="2000-12-05 10:02:56"
mysqlbinlog 倒数第二个binlog --stop-datetime="2000-12-05 11:02:54"
mysqlbinlog 倒数第二个binlog --start-datetime="2000-12-05 10:02:56" --stop-datetime="2000-12-05 11:02:54"
mysqlbinlog 倒数第二个binlog --start-datetime="2000-12-05 10:02:56" --stop-datetime="2000-12-05 10:02:56" 错误
按字节数:(如果时间点有重合)
mysqlbinlog 倒数第二个binlog --start-position=260
mysqlbinlog 倒数第二个binlog --stop-position=260
mysqlbinlog 倒数第二个binlog --start-position=260 --stop-position=930
|