天天看点

mysql备份与恢复多库多表备份

实例:

备份:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>kaliboy&gt;</code><code>/opt/kaliboy</code><code>.sql</code>

指定字符集备份:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>--default-character-</code><code>set</code><code>=utf8 kaliboy&gt;</code><code>/opt/kaliboy</code><code>.sql</code>

备份参数:

<code>-e : 后面可以执行mysql 命令用;分开</code>

<code>-B :参数的作用是增加创建数据库和连接数据库的命令</code>

<code>-d : 备份表结构</code>

<code>-t : 备份数据</code>

<code>-A -B --events 备份全部数据库</code>

<code>-F : 刷新binlog日志文件</code>

<code>--master-data=1(=2) : 增加binlog日志文件名及对应的位置点</code>

<code>-x,--lock-all-tables 锁表</code>

<code>-l,--lock-tables 只读锁表</code>

<code>--compact :去掉注释</code>

<code>--single-transaction : 适合innodb事务数据库备份</code>

<code>mysqldump -u root -p</code><code>'123456'</code> <code>-B kaliboy&gt;</code><code>/opt/kaliboy_bak</code><code>.sql</code>

还原数据库:

<code>mysql -uroot -p</code><code>'123456'</code> <code>&lt;</code><code>/opt/kaliboy_bak</code><code>.sql</code>

查看备份内容:

<code>egrep</code> <code>-</code><code>v</code> <code>"#|\*|--|^$"</code> <code>/opt/kaliboy</code><code>.sql</code>

查看字符集:

<code>mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show variables like '%character%'"</code>

myqsl多库备份:

<code>mysqldump -uroot -p</code><code>'123456'</code> <code>-B (库名)kaliboy (库名)ClasssInfo (库名)kaliboy_gbk|</code><code>gzip</code> <code>&gt;</code><code>/opt/mysql_bak</code><code>.sql.gz</code>

mysql分库备份:

<code>mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show databases;"</code><code>|</code><code>grep</code> <code>-Evi </code><code>"database|info|perfor"</code><code>|</code><code>sed</code> <code>-r </code><code>'s#^([a-z].*$)#mysqldump -uroot -p'</code><code>123456</code><code>' --events -B \1|gzip &gt;/opt/\1.sql.gz#g'</code><code>|</code><code>bash</code>

<code>#!/bin/bash</code>

<code>for</code> <code>dbname </code><code>in</code> <code>`mysql -uroot -p</code><code>'123456'</code> <code>-e </code><code>"show databases;"</code><code>|</code><code>grep</code> <code>-Evi </code><code>"database|infor|perfor"</code><code>`</code>

<code>do</code>

<code>mysqldump -uroot -p</code><code>"123456"</code> <code>--events -B $dbname|</code><code>gzip</code> <code>&gt;</code><code>/opt/bak</code><code>${dbname}_bak.sql.gz</code>

<code>done</code>

备份单个表和多表:

语法:mysqldump -u 用户名 -p 数据库名 表名 表名 表名&gt;备份的文件名

<code>mysqldump -u root -p ClassInfo score&gt;</code><code>/opt/table1</code><code>.sql</code>

分库分表备份:

<code>#!/bin/bash</code>

<code>USER=root</code>

<code>PASSWD=123456</code>

<code>SOCK=</code><code>/data/3306/mysql</code><code>.sock</code>

<code>LOGIN=</code><code>"mysql -u$USER -p$PASSWD -S $SOCK"</code>

<code>DATABASES=`$LOGIN -e </code><code>"show databases;"</code><code>|</code><code>sed</code> <code>"1d"</code><code>|</code><code>egrep</code> <code>-</code><code>v</code> <code>"^.*sch|mysql"</code><code>`</code>

<code>dump=</code><code>"mysqldump -u$USER -p$PASSWD -S $SOCK"</code>

<code>for</code> <code>database </code><code>in</code> <code>$DATABASES</code>

<code>[ ! -d </code><code>/back/</code><code>$database ] &amp;&amp; </code><code>mkdir</code> <code>-p </code><code>/back/</code><code>$database</code>

<code>TABLE=`$LOGIN -e </code><code>"show tables from $database;"</code><code>|</code><code>sed</code> <code>'1d'</code><code>`</code>

<code>for</code> <code>table </code><code>in</code> <code>$TABLE</code>

<code>$dump $database $TABLE|</code><code>gzip</code> <code>&gt;</code><code>/back/</code><code>$database/${database}_${table}_$(</code><code>date</code> <code>+%F).sql.gz</code>

只备份表结构和只备份数据:

参数-d 备份表结构

参数-t 备份数据

<code>mysql -u root -p</code><code>'123456'</code> <code>--compact -d ClassInfo score&gt;</code><code>/opt/tabled</code><code>.sql</code>

<code>mysql -u root -p</code><code>'123456'</code> <code>--compact -t ClassInfo score&gt;</code><code>/opt/tablet</code><code>.sql</code>

备份全部数据库:

<code>mysqldump -u root -p</code><code>'123456'</code> <code>-A -B --events|</code><code>gzip</code> <code>&gt;</code><code>/opt/all</code><code>.sql.gz</code>

myisam与innodb备份的区别:

myisam :

mysqldump -uroot -p'123456' -A -B --master=2 -x|gzip &gt;/opt/all.sql.gz

mysqldump -uroot -p'123456' -A -B --master=2 -x --triqqers --routines --events --hex-blob|gzip &gt;/opt/all.sql.gz

innodb:

mysqldump -uroot -p'123456' -A -B --master=2 --singe-transaction|gzip &gt;/opt/all.sql.gz

mysqldump -uroot -p'123456' -A -B --master=2 --singe-transaction --triqqers --routines --events --hex-blob|gzip &gt;/opt/all.sql.gz

恢复数据库实战:

利用source命令恢复数据库

进入mysql数据库控制台,mysql -u root -p 登录后

mysql&gt;use 数据库名

然后使用命令source 命令,后面参数为脚本文件,可以利用system ls 查看文件路径

mysql&gt;source /opt/all.sql.gz

批量恢复脚本实例:

#!/bin/bash

gzip -d /opt/*.gz

for dbname in `ls *.sql|sed 's#_bak.sql##g'`;

do

mysql -u root -p'123456' &lt;${dbname}_bak.sql;

done

mysql--shou命令总结:

show status; 查看当前会话的数据库状态信息

show global status; 查看整个数据库运行状态信息

show full processlist; 查看正在执行的sql语句

show variables; 查看数据库参数信息

---------------------------------------------

mysqlbinlog -&gt;解析mysql的binlog日志

用来记录mysql内部增删改查等对mysql数据库有更新的内容记录。

mysqlbinlog参数:

-d 截取指定库的binlog

按照位置截取:

mysqlbinlog mysqlbin.000046 --start-position=365 --stop-position=456 -r /opt/pos.sql

按照时间截取:

mysqlbinlog mysql-bin.000046 --start-datetime='2016-10-15 15:14:15' --stop-datetime='2016-10-15 15:16:17' -r time.sql

本文转自 蓝叶子Sheep 51CTO博客,原文链接:http://blog.51cto.com/dellinger/1948087,如需转载请自行联系原作者