备份数据库 mysqldump -uroot -p 数据库名 > database.sql #之后会提示让你输入密码
备份一个或者多个数据库 mysqldump [options] ---database DB1 [DB2 DB3...]
备份所有数据库 (如果没有指定数据库中的任何表,默认导出所有数据库中的所有表) mysqldump [options] --all-database
备份数据库test mysqldump -uroot -p test > test.sql
备份数据库test下的表emp和dept mysqldump -uroot -p test emp dept > test_emp_dept.sql -T指明导出路径,-l给所有表加读锁 –F(flush-logs)产生新的binlog 方便恢复以后使用binlog恢复新生成的那段数据
恢复 1.先创建新数据库,再mysql -uroot -p 新数据库名 < database.sql 或者登陆交互模式以后创建数据库,再source database.sql(注意要使用绝对路径) 2.使用 mysqlbinlog 恢复自 mysqldump 备份以来的 binlog。 mysqlbinlog $HOME/data/mysql-bin.123456 | mysql -u root –p*** 单个表的备份 mysqldump -uroot -h127.0.0.1 -p -T /tmp sakila language --fields-terminated-by ',' 导出到/tmp下会产生两个文件 一个是language.sql , 一个是language.txt用于保存数据(以逗号分隔) 单个表的恢复 mysqlimport –u root –p*** [--local] sakila language.txt -- fields-terminated-by=’,’;
可能遇到的错误 mysqldump: Got error: 1290: The MySQL server is running with the --secure-file-priv option so it cannot execute this statement when executing 'SELECT INTO OUTFILE' 可以很清楚地从提示看到是因为mysql服务启用了–secure-file-priv,所以才无法执行。 那么–secure-file-priv又是什么,应该如何解决才能是它可以备份呢? --secure-file-priv=name : Limit LOAD DATA, SELECT ... OUTFILE, and LOAD_FILE() to files within specified directory 可以看到secure-file-priv参数是用来限制LOAD DATA, SELECT … OUTFILE, and LOAD_FILE()传到哪个指定目录的。 当secure_file_priv的值为null ,表示限制mysqld 不允许导入|导出 当secure_file_priv的值为/tmp/ ,表示限制mysqld 的导入|导出只能发生在/tmp/目录下 当secure_file_priv的值没有具体值时,表示不对mysqld 的导入|导出做限制 secure_file_priv这个变量不支持动态修改,官方文档写明了,需要重启mysql
select * from user into outfile '/tmp/test.sql' 用于导出user表到指定文件夹下,mysqldump就是使用该statement
时间点恢复:
1.如果上午 10 点发生了误操作,可以用以下语句用备份和binglog 将数据恢复到故 障前:
mysqlbinlog --stop-date="2005-04-20 9:59:59" /var/log/mysql/bin.123456 | mysql -u root –pmypwd
2.跳过故障时的时间点,继续执行后面的 binlog,完成恢复
mysqlbinlog --start-date="2005-04-20 10:01:00" /var/log/mysql/bin.123456| mysql -u root -pmypwd
位置恢复:
mysqlbinlog --start-date="2005-04-20 9:55:00" --stop-date="2005-04-20 10:05:00" /var/log/mysql/bin.123456 > /tmp/mysql_restore.sql
该命令将在/tmp 目录创建小的文本文件,编辑此文件, 找到出错语句前后的位置号, 例如前后位置号分别是 368312 和 368315。恢复了以前的备份文件后,你应从命令 行输入下面内容:
mysqlbinlog --stop-position="368312" /var/log/mysql/bin.123456 \ | mysql -u root -pmypwd
mysqlbinlog --start-position="368315" /var/log/mysql/bin.123456 \ | mysql -u root -pmypwd
上面的第 1 行将恢复到停止位置为止的所有事务。下一行将恢复从给定的起始位置 直到二进制日志结束的所有事务。因为mysqlbinlog 的输出包括每个 SQL 语句记录 之前的SET TIMESTAMP语句,恢复的数据和相关MySQL日志将反应事务执行的原时 间。
表大小 select table_schema,table_name,(data_length+index_length)/1024/1024 as "MB",table_rows from information_schema.tables order by MB desc limit 100;
把SQL脚本放到MySQL命令行里执行: $ mysql -u root -p < schema.sql