4.mysql数据库的备份与恢复
4.1准备工作:首先建表填充数据
对于mysql5.1常规编译方式创建不同字符集格式的数据库命令
create database wj_default; 相当于拉丁字符集
建立一个名为wj_gbk的gbk字符集数据库
mysql> create database wj_gbk default character set gbk collate gbk_chinese_ci;
建立一个名为wj_utf8的utf8字符集数据库
mysql> create database wj_utf8 character set utf8 collate utf8_general_ci;
提示:字符集的不一致是数据库乱码的罪魁祸首,服务器字符集,操作系统字符集,数据库服务端字符集,库与表的字符集,客户端软件字符集
4.2填充中文数据暴露乱码问题
4.2.1mysql命令行插入中文乱码问题解决:
1.set names gbk;只能是查询时候用
2.在文件中指定set names gbk;
使用source命令时,将sql文件传入到linux系统上,不要切换目录,登录mysql,使用source命令就可以找到文件了
[wj@hcf ~]$ mysql -uroot -p'wj123' wj /opt/$(date+%F).sql
mysqldump -uroot -p'wj123' –B wj >/opt/$(date+%F).sql.b 建库切库
mysqldump -uroot -p'wj123' –B wj |gzip>/opt/$(date+%F).sql.gz 备份压缩
mysqldump -uroot -p'wj123' -- default-character-set=utf8–B wj |gzip>/opt/$(date+%F).sql.gz字符集备份
mysql –uroot –p’wj123’ wj /opt/$(date+%F).sql.gz
分库备份,多个数据库分开备份(大库小库)先把数据库读出来
mysqldump -uroot -p'wj123' –events –B wj |gzip>/opt/$(date+%F).sql.gz
mysqldump -uroot -p'wj123' –events –B test |gzip>/opt/$(date+%F).sql.gz
然后做个脚本实现
4.7备份单个表
mysqldump -uroot -p'wj123' databasename tablename2|gzip>/opt/$(date+%F).sql.gz
4.8备份多个表
mysqldump -uroot -p'wj123' databasename tablename1 tablename2 …|gzip>/opt/$(date+%F).sql.gz
4.9分表备份(大表小表)一个表一个表备份
先把数据库读出来,再把表读出来,再切分
mysqldump -uroot -p'wj123' databasename tablename1|gzip>/opt/$(date+%F).sql.gz
mysqldump -uroot -p'wj123' databasename tablename2|gzip>/opt/$(date+%F).sql.gz
4.10备份数据库的结构(参数-d)生产偶尔用
mysqldump -uroot -p'wj123' -d databasename |gzip>/opt/$(date+%F).sql.gz
备份数据库一个表结构,没有行信息
mysqldump -uroot -p'wj123' -d databasename tablename|gzip>/opt/$(date+%F).sql.gz
4.11只备份数据(-t)
4.12备份时去掉注释(--compact)是有注释的1/3测试时用的多
mysqldump -uroot -p'wj123' --compact databasename |gzip>/opt/$(date+%F).sql.gz
egrep –v “^\-|\*|^$” /mnt/tmp.sql查看mysql备份的文件
4.13备份数据库时锁表()
-x –lock-all-tables锁表
-l –lock-tables lock all tables for read.给所有的表加读锁
-q –quick 表如果比较大时备份时候快
--single-transaction innodb引擎使用这个
5.数据库恢复
1.source
只要是sql语句就可以用source执行,source test.sql这个文件是系统路径,如果不加全路径,默认是登录mysql前的系统路径
2.mysql命令恢复(标准)
如果在导出时指定-B参数,恢复时无需指定库恢复,因为-B参数带了use database,而恢复时指定库就类似于use database
mysql –uroot –p’wj123’ wj system mysql –uroot –p’wj123’ wjaaa.log 如果滚屏定向到log中再用less查看这个log
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "show variables;"|head -5
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "show variables like 'wait_timeout' "避免引号冲突
查看分析mysql的健康状态
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "show global status;"|egrep "Com_select|Com_insert|Com_update|Com_delete"
不重启mysql,修改mysql参数,但要求重启后还能生效
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "show variables;"|grep key_buffer_size
grep key_buffer /etc/my.cnf 对应mysqld中的key_buffer_size的值,另一个对应myisamchk检查mysql
myisam索引的缓冲区,不用重启修改这个参数
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "set global key_buffer_size=32M"
ERROR 1232 (42000) at line 1: Incorrect argument type to variable 'key_buffer_size'
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "set global key_buffer_size=32777218"
vi /etc/my.cnf中修改mysqld中的key_buffer_size保证重启后也生效
7.mysql生产环境
7.1mysql数据库批量插入数据shell脚本实现
http://oldboy.blog.51cto.com/2561410/597511
7.2不登录数据库执行mysql命令小结:
http://oldboy.blog.51cto.com/2561410/632608
1.通过echo实现(比较常见)
[wj@hcf ~]$ echo "show variables;"| mysql -uroot -p'wj123'|grep key_buffer_size
2.通过cat实现(此法用的不多)
提示此法适合多行字符串比较多的时候
3.通过mysql –e参数实现
7.3mysql线程中,”大海捞针”
平时登录数据库show processlist;发现结果经常超长,找自己要看的比较困难,而且,sql显示不全.如果直接执行show full processlist那更是瞬间滚了N屏了.找到有问题的sql语句非常困难.
[wj@hcf ~]$ mysql -uroot -p'wj123' -e "show full processlist;"|grep –v Sleep >aaa.log
过滤当前执行的sql语句完整内容,后面还可以加iconv等对中文转码.