一)mysqldump是线上的逻辑备份。备份的是建表、建库、插入等操作所执行SQL语句。

mysqldump导出的数据时刻迁移到其它数据库的表。它的备份速度要比直接copy慢。

 

1,备份一个数据库或者一张表

     mysql>mysqldump [option]  dbname  [tablename]

    #mysqldump  数据库  表名 表名 …… -u username -p

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