利用mysqldump命令备份数据的过程,实际上就是把数据从mysql库里以逻辑sql语句的形式直接输出或者生成备份的文件的过程。
备份多个库及多个参数练习
a、操作结果
mysqldump -uroot -poldboy123 -B oldboy lodboy_gbk|gzip >/opt/all_bak.sql.gz
-B参数说明
提示:-B参数是关键,表示连接多个库,并且增加use db和create database db的信息。
########(生产环境常用)
-B,--databases To dump several databases.Note the difference in usage;
In this case no tables are given.All name arguments are
regarded as databasenames.'USE db_name;'will be
included in the output.
参数说明:该参数用于导出若干个数据库,在备份结果中会加入USE db_name和CREATE DATABASE'db_name';
-B后的参数都将被作为数据库名。该参数比较常用。当-B后的数据库列全时,用-A参数。
如何做分库备份?
分库备份实际上就是执行一个备份语句备份一个库,如果数据库里有多个库,就执行多条相同的备份单个库的备份语句就可以备份多个库了,注意每个库都可以用对应备份的库作为库名,结尾加.sql。备份多个库的命令如下:
mysqldump -uroot -poldboy123 -B oldboy ...
mysqldumo -uroot -poldboy123 -B oldboy_gbk...
....
将上述命令放入一个脚本里就是脚本分库备份了,当然这样是很土的备份脚本了,更好的
分库备份的意义何在?
有时一个企业的数据库里会有多个库,但是出问题时可能是某一个库,如果在备份时把所有的库都备份成了一个数据文件的话恢复某一个库的数据时就比较麻烦了
备份单个表
语法:mysqldump -u用户名 -p 数据库名 表名>备份的文件名
mysqldump -uroot -poldboy student>/opt/table1.sql
提示:不能加-B参数了,因为库oldboy后面就是oldboy表了
备份多个表
语法:mysqldump -u用户名 -p 数据库名 表名1 表名2 >备份的文件名
mysqldump -uroot -poldboy student course >/opt/table2.sql
企业需求:一个库里有大表有小表,有时可能需要只恢复某一个小表,上述的多表备份文件很难拆开,就会像没有分库那样导致恢复某一个小表很麻烦。
那么又如何进行分表备份呢?如下,和分库的思想一样,每执行一条语句备份一个表,生成不同的数据文件即可。如下:
mysqldump -uroot -p oldboy test > oldboy_test.sql
mysqldump -uroot -p oldboy test1>oldboy_test1.sql
....
将上述命令放入一个脚本里就是脚本分表备份了,当然这样是很土的备份脚本了,更好的备份脚本
分表备份缺点:文件多,碎
1、备一个完整全备,再做一个分库分表备份
2、脚本批量恢复多个sql文件
备份数据库表结构(不包含数据)
利用mysqldump -d参数只备份表的结构,例:备份oldboy库的所有表的结构
mysqldump -uroot -poldboy123 -B -d oldboy >/opt/t.sql
更多用法可以执行mysqldump -help查询。有关mysql和mysqldump需要详细总计。
如果希望只导出数据需要用-t
-t, --no -create-info Don't write table creation info只备份数据
-B 指定多个库,增加建库语句和use语句
-F 刷新binlog日志
-A 备份所有库
-master-data 增加binlog日志文件名及对应的位置点
--compact 去掉注释,适合调试输出,生产不用
-x,--lock-all-tables
-l,--lock-tables Lock all tables for read
--single-transaction 适合innodb事务数据库备份
InnoDB表在备份时,通常启用选线--single-transaction来保证备份的一致性,实际上它的工作原理是设定本次会话的隔离级别为:REPEATABLE READ,以确保本次会话(dump)时,不会看到其他会话已经提交了的数据
企业生产场景的使用
myisam备份命令:
mysqldump -uroot -poldboy123 -A -B -F --master-data=1/2 -x --events|gzip>/opt/all.sql.gz
innodb备份命令:推荐使用的
mysqldump -uroot -poldboy123 -A -B -F --master-data=1/2 --events --single-transaction|gzip>/opt/all.sql.gz
混合以myisam为准
恢复数据库实践
1、利用source命令恢复数据库
进入mysql数据库控制台,mysql -uroot -p登录后
mysql>use 数据库
然后使用source命令,后面参数为脚本文件(如这里用到的.sql)
mysql>source oldboy_db.sql#这个文件是系统路径,默认是登录mysql前的系统路径。
2、利用mysql命令恢复(标准)
mysql -uroot -poldboy123 oldboy < /opt/mysql_bak.sql
问题:分库分表备份的数据如何快速恢复呢?
还是通过脚本制定的库和表,调用mysql命令恢复。
mysql带-e参数实现非交互式对话
mysql进程-状态-在线修改参数重要知识讲解
mysql -uroot -poldboy123 -e "show databases;"
mysql -uroot -poldboy123 -e "set names latin1;use oldboy;select * from student;"
一般先改参数文件,再改全局变量
set key_buffer_size =1024*1024*32
小结:生产常用命令
show status <-查看当前会话的数据库状态信息
show global status;<-查看整个数据库运行状态信息,很重要要分析并做好监控
show processlist;<-查看正在执行的SQL语句,看不全
show full processlist;<-查看正在执行的完整SQL语句,全
set global key_buffer_size =32777218<-不重启数据库调整数据库参数,直接生效,重启后失效
show variables;<-查看数据库的参数信息,例如:my.cnf里参数的生效情况
开关类的参数不能在线改,需要更改配置文件后重启数据库生效
mysql数据库批量插入数据shell脚本实现
不登录数据库执行mysql命令小结