用mysqldump备份出数据库内容到SQL文件。当我们数据库表有blob类型字段的时候,这个导出的SQL再导入的时候就会因为blob字段内容乱码等原因,不能顺利导入了。
解决办法:
在用mysqldump备份的时候,采用--hex-blob参数,这样备份出来的sql文件,就可以顺利导入了。
我的数据库采用编码如下:
mysql> show variables like 'coll%';
+----------------------+-------------------+
| Variable_name | Value |
+----------------------+-------------------+
| collation_connection | latin1_swedish_ci |
| collation_database | latin1_swedish_ci |
| collation_server | latin1_swedish_ci |
+----------------------+-------------------+
3 rows in set (0.00 sec)
mysql> show variables like 'character_set%';
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
8 rows in set (0.00 sec)
数据库的编码采用utf8
开始用mysqldump出来的都是乱码。后来采用 --default-character-set=gbk参数,然后再用iconv转码为utf8就解决了问题。
下面是我的数据库备份脚本
- #!/bin/sh
- #####configurate#######
- rq=`date +%Y%m%d%N`
- user="user"
- password="password"
- rm -rf /var/lib/mysql/mysql-bin.*
- mysqldump -u$user -p$password --default-character-set=gbk --single-transaction --flush-logs --master-data=2 mydatabase>/home/ict/mysql_backup/database$rq.sql
导出后转码
iconv -t utf-8 -f gbk -c database.sql>databaseutf8.sql
这样已经可以看到正确的中文了。
导入
在windows下,如果采用HeidiSQL打开SQL文件,可以正确看到中文,但是导入后还是乱码。
解决办法,采用记事本打开,选择另存为,编码选择ANSI。然后再用HeidiSQL工具打开导入即可。
今天遇到个问题,有个程序从Windows导入到Linux的时候,表格全部小写了。但程序里很多DAO全是大写调用。
Linux默认安装的Mysql是表名区分大小写的。
这个设置主要是在/etc/my.cnf里面的[mysqld]段,加入如下设置项
lower_case_table_names = 1
如果设置为0,就是区分大小写。设置为1就是不区分了。
以前一直使用Navicat客户端,功能确实强大。不过这个客户端是收费的商业软件。
最近发现有一款HeidiSQL的开源软件,也可以很好的管理MySQL。使用后,发现很不错。这里推荐下
官方介绍:
What's this?
HeidiSQL is an easy-to-use interface and a "working-horse" for web-developers using the popular MySQL-Database. It allows you to manage and browse your databases and tables from an intuitive Windows® interface.
放一张官方截图
最近在整理服务器的时候,发现mysql的查询日志文件占用了很多空间。这个查询日志文件部分内容如下,随着查询增加,会越来越大
- Tcp port: 3306 Unix socket: /tmp/mysql.sock
- Time Id Command Argument
- 100404 8:36:49 1 Connect zzz@localhost on
- 1 Init DB zzz
- 1 Query SET NAMES 'utf8'
- 1 Query SELECT * FROM `boblog_counter` LIMIT 0,1
- 1 Query SELECT `blogid`,`pubtime`,`edittime`,`blogalias` FROM `boblog_blogs` WHERE `property`<2 ORDER BY `pubtime`DESC LIMIT 0, 1500
- 1 Quit
- 100404 8:38:01 2 Connect admin@localhost on
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT * FROM `cmseasy_settings` WHERE `tag`='table-fieldset' ORDER BY 1 DESC limit 1
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT * FROM `cmseasy_user` WHERE userid>0 ORDER BY 1 DESC limit 1
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT count(typeid) as rec_sum FROM `cmseasy_type`
- 2 Query SELECT * FROM `cmseasy_type` ORDER BY `order`,1 limit 1000
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT count(1) as rec_sum FROM `cmseasy_friendlink` WHERE state>0 and linktype=1
- 2 Query SELECT * FROM `cmseasy_friendlink` WHERE state>0 and linktype=1 ORDER BY listorder asc,id limit 20
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT count(1) as rec_sum FROM `cmseasy_friendlink` WHERE state>0 and linktype=1
- 2 Query SELECT * FROM `cmseasy_friendlink` WHERE state>0 and linktype=1 ORDER BY listorder asc,id limit 20
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query SELECT * FROM `cmseasy_templatetag` WHERE name='å~E¬å~O¸ç®~@ä»~K' ORDER BY 1 DESC limit 1
- 2 Init DB zzz
- 2 Query SET NAMES 'utf8'
- 2 Query SET sql_mode=''
- 2 Query Describe cmseasy_archive
- 2 Query SELECT count(1) as rec_sum FROM `cmseasy_archive` WHERE typeid in (2) and checked=1 and (state IS NULL or state<>'-1')
- 2 Query SELECT * FROM `cmseasy_archive` WHERE typeid in (2) and checked=1 and (state IS NULL or state<>'-1') ORDER BY aid desc limit 4
其实记录的都是mysql执行的一些select语句,对于正常运行的服务器,我觉得基本没有必要保留这些日志。






