以前就为mysqldump导出的文件编码折腾过,这一次没费那么大的劲。因为blog的备份是以前从系里mysql服务器dump出来的,并且系里的mysql服务器版本比较低是4.0 (-- Server version 4.0.24_Debian-10sarge2-lo),导出文件的默认编码不是utf8。使用iconv转换总失败,只好用来方法,用notepad++打开sql文件,然后选择format -> convert to utf8,保存为utf8编码的文件。中间notepad++假死很长时间,耐心等待之后才成功保存。这样把utf8编码的sql文件上传到新的mysql服务器(版本为v5.0.81)后,中文和变音才正常显示。
2009-07-12
2006-08-22
MS Access与MySQL
Kompetenzentrum的秘书Frau Hallmann用Access做了一个包含KZ全体员工的信息,包括常见的联系方式,办公室,合同类型,合同时间等等。现在她想把那些可以公开的信息发布到Zope Webserver上,于是我把Access的数据导入到了MySQL数据库中。因为她还用Access做了一些输入框,便于输入数据。如果每次在她更新了Access数据后,都手动来把更新提交到MySQL数据库里,这样显然不方便。一个简单的解决办法是安装MySQL Connector/ODBC 3.51,然后使用Access作为输入前端,用MySQL作为存储引擎。
2006-07-25
convert MyISAM to InnoDB
MySQL的文档说InnoDB类型的表在处理数据比较大时,效率要比MyISAM类型好。urts52上有个字典数据库的数据为6.4个GB,不算小了。于是想把这个数据库的所有表从MyISAM 类型转换成 InnoDB类型,常见的办法是。
1. Dump the database with mysqldump
2. Change TYPE=ISAM to TYPE=INNODB
3. Add entries to /etc/my.cnf and restart MySQL
4. Load the database with mysql
不过如果MySQL server已经支持InnoDB了,可以用更简单的办法,如转换单个表的类型:
如果要转换一个数据库带有某个特定前缀的表或忽略某些表,可以搭配grep来使用:
或者直接输入多个表的名称:
1. Dump the database with mysqldump
2. Change TYPE=ISAM to TYPE=INNODB
3. Add entries to /etc/my.cnf and restart MySQL
4. Load the database with mysql
不过如果MySQL server已经支持InnoDB了,可以用更简单的办法,如转换单个表的类型:
alter table mytable type=InnoDB;如果要转换一个数据库所有表,可以用:for t in $(mysql --batch --column-names=false -e "show tables" mydbname);
do
mysql -e "alter table $t type=InnoDB" mydbname;
done
如果要转换一个数据库带有某个特定前缀的表或忽略某些表,可以搭配grep来使用:
for t in $(mysql --batch --column-names=false -e "show tables" mydbname |grep "include_this");
do
mysql -e "alter table $t type=InnoDB" mydbname;
done
for t in $(mysql --batch --column-names=false -e "show tables" mydbname | grep -v "exclude_this");
do
mysql -e "alter table $t type=InnoDB" mydbname;
done
或者直接输入多个表的名称:
for t in table_1 table_2 table_n;
do
mysql -e "alter table $t type=InnoDB" mydbname;
done
2006-07-19
mysqldump: Error 2013
今天写了个小的脚本,把MySQL的数据从urts52复制到urts96时,运行时得到一些错误:
copying DWBdatabase4cd
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `TEXT_H` at row: 23854
copy database DWBdatabase4cd finished!
now copying DWVdatabase2
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `lemma` at row: 9251
出现这个问题的原因很有可能是max_allowed_packet变量的值设置太小了。
这儿有一个关于这个问题的讨论,和参看MySQL手册中相关的部分。
copying DWBdatabase4cd
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `TEXT_H` at row: 23854
copy database DWBdatabase4cd finished!
now copying DWVdatabase2
mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `lemma` at row: 9251
出现这个问题的原因很有可能是max_allowed_packet变量的值设置太小了。
这儿有一个关于这个问题的讨论,和参看MySQL手册中相关的部分。
2006-07-18
MySQL区分用户名大小写
以前一直没有注意MySQL中用户名大小写的问题,因为用户名一般都是小写的。今天Ansgar给我设置了一个MySQL账户,用户名为Dingjun。这样我用小写的用户名登陆
就得到错误提示。使用区分大小写的用户名就没有问题:
jiad4701@urts96:~> mysql -u dingjun -p
Enter password:
ERROR 1045 (28000): Access denied for user 'dingjun'@'localhost' (using password: YES)
就得到错误提示。使用区分大小写的用户名就没有问题:
jiad4701@urts96:~> mysql -u Dingjun -p
Enter password:
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 264184 to server version: 4.1.13
Type 'help;' or '\h' for help. Type '\c' to clear the buffer.
2006-07-02
MySQL 4.1中涉及字符编码的变量
有多个有关character set 和 collation的变量会影响MySQL客户端与MySQL服务器的交互操作,对于在数据库中使用非英语的语言时,这些变量如果没有正确设置,就会导致出现乱码。
MySQL服务器端的character set 和 collation是由变量character_set_server 和 collation_server分别来决定的,创建数据库时默认的character set 和 collation则是由变量character_set_database and collation_database来指定的。
MySQL服务器端的character set 和 collation是由变量character_set_server 和 collation_server分别来决定的,创建数据库时默认的character set 和 collation则是由变量character_set_database and collation_database来指定的。
2005-08-09
2005-07-18
MySQL Query Cache
作者:邓铠剑
出处:http://weblog.mywww.biz/arnold/index.php?itemid=46&catid=6
参考:MySQL Manual
今天下载了 MySQL 4.1.12 ,准备为升级网站的数据库,MySQL 4.0.1 版本开始支持查询缓存技术,今天针对查询缓存进行了一些了解。 MySQL 4.0.1 版本开始支持查询缓存技术,今天针对查询缓存进行了一些了解。
查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果。如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。
注意:
1、查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被转储清除。
2、查询在分析之前先被比较,因而 SELECT * FROM tbl_name 和 Select * from tbl_name对于查询缓存被当作是不同的查询,因而查询需要严格的一致(字节对字节的),才会被认为是同样的。另外,如果一个客户端使用一个新的连接协议格式或不同于其它客户端的另一个字符集,一个查询将被视为不同的。
出处:http://weblog.mywww.biz/arnold/index.php?itemid=46&catid=6
参考:MySQL Manual
今天下载了 MySQL 4.1.12 ,准备为升级网站的数据库,MySQL 4.0.1 版本开始支持查询缓存技术,今天针对查询缓存进行了一些了解。 MySQL 4.0.1 版本开始支持查询缓存技术,今天针对查询缓存进行了一些了解。
查询缓存会存储一个 SELECT 查询的文本与被传送到客户端的相应结果。如果之后接收到一个同样的查询,服务器将从查询缓存中检索结果,而不是再次分析和执行这个同样的查询。
注意:
1、查询缓存绝不返回过期数据。当数据被修改后,在查询缓存中的任何相关词条均被转储清除。
2、查询在分析之前先被比较,因而 SELECT * FROM tbl_name 和 Select * from tbl_name对于查询缓存被当作是不同的查询,因而查询需要严格的一致(字节对字节的),才会被认为是同样的。另外,如果一个客户端使用一个新的连接协议格式或不同于其它客户端的另一个字符集,一个查询将被视为不同的。
2005-06-26
mysqldump常用的选项
germa83上的mysql有超过3个G的数据,在重装系统时难免要把数据备份,我使用的是备份mysql数据库的常见工具,mysqldump。在备份时,使用了mysqldump --opt DWBdatabase > DWBdatabase.sql。阅读mysql的手册才知道,其实--opt在4.1版本以上是默认打开的(As of MySQL 4.1, --opt is on by default, but can be disabled with --skip-opt)。在导入数据时我先用create database DWBdatabase,然后用mysql DWBdatabase DWBdatabase.sql 就可以避免这样的麻烦。看来仔细阅读手册还是很有用的。总结一下常见用法:
mysqldump最常见的用法是:
shell> mysqldump --opt -u username --password="password" db_name > backupfile.sql
shell>mysqldump --opt -u username --password="password" db_name > backupfile.sql
或者压缩备份文件:
#mysqldump --opt -u user --password="password" database | bzip2 -c > database.sql.bz2
在dbname已经存在的情况下,读入备份文件恢复数据库,
shell> mysql db_name mysql -e "source /path-to-backup/backup-file.sql" db_name
mysqldump 还可以用于在两个mysql server之间复制数据:
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
也可以同时备份多个数据库:
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
如果想一次备份整个数据库使用 --all-databases 选项:
shell> mysqldump --all-databases > all_databases.sql
常见选项:
--add-drop-table:添加DROP TABLE语句
--add-locks:用LOCK TABLES 和 UNLOCK TABLES 语句封装插入每个表格的语句,能加速数据导入速度
--all-databases, -A: 备份所有数据库
--compress, -C:用于在两个server之间复制时压缩数据
--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump 把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。CREATE DATABASE IF NOT EXISTS db_name and USE db_name 会被添加到导出文件里。
--force, -f:即使发现sql错误,仍然继续备份
--host=host_name, -h host_name:备份主机名,默认为localhost
--no-data, -d:只导出表结构
--opt:等同于激活--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset这些选项
--password[=password], -p[password]:密码
--port=port_num, -P port_num:制定TCP/IP连接时的端口号
--protocol={TCP | SOCKET | PIPE | MEMORY}:制定连接所用的协议
--quick, -q:快速导出
--socket=path, -S path:当连接至localhost时,制定socket文件
--tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
--user=user_name, -u user_name:用户名
--xml, -X:导出为xml文件
mysqldump最常见的用法是:
shell> mysqldump --opt -u username --password="password" db_name > backupfile.sql
shell>mysqldump --opt -u username --password="password" db_name > backupfile.sql
或者压缩备份文件:
#mysqldump --opt -u user --password="password" database | bzip2 -c > database.sql.bz2
在dbname已经存在的情况下,读入备份文件恢复数据库,
shell> mysql db_name mysql -e "source /path-to-backup/backup-file.sql" db_name
mysqldump 还可以用于在两个mysql server之间复制数据:
shell> mysqldump --opt db_name | mysql --host=remote_host -C db_name
也可以同时备份多个数据库:
shell> mysqldump --databases db_name1 [db_name2 ...] > my_databases.sql
如果想一次备份整个数据库使用 --all-databases 选项:
shell> mysqldump --all-databases > all_databases.sql
常见选项:
--add-drop-table:添加DROP TABLE语句
--add-locks:用LOCK TABLES 和 UNLOCK TABLES 语句封装插入每个表格的语句,能加速数据导入速度
--all-databases, -A: 备份所有数据库
--compress, -C:用于在两个server之间复制时压缩数据
--databases, -B: 用于备份多个数据库,如果没有该选项,mysqldump 把第一个名字参数作为数据库名,后面的作为表名。使用该选项,mysqldum把每个名字都当作为数据库名。CREATE DATABASE IF NOT EXISTS db_name and USE db_name 会被添加到导出文件里。
--force, -f:即使发现sql错误,仍然继续备份
--host=host_name, -h host_name:备份主机名,默认为localhost
--no-data, -d:只导出表结构
--opt:等同于激活--add-drop-table --add-locks --create-options --disable-keys --extended-insert --lock-tables --quick --set-charset这些选项
--password[=password], -p[password]:密码
--port=port_num, -P port_num:制定TCP/IP连接时的端口号
--protocol={TCP | SOCKET | PIPE | MEMORY}:制定连接所用的协议
--quick, -q:快速导出
--socket=path, -S path:当连接至localhost时,制定socket文件
--tables:覆盖 --databases or -B选项,后面所跟参数被视作表名
--user=user_name, -u user_name:用户名
--xml, -X:导出为xml文件
2005-06-23
不输入密码进入mysql shell界面
你的mysql帐户是受密码保护的,如果觉得每次进入mysql shell界面输入密码比较烦的话,将密码置空有不安全的话,可以在自己的主目录下生成一个.my.cnf文件,包含下列几行:
# The following options will be passed to all MySQL clients
[client]
port = 3307 #mysql 运行的端口号
socket = /tmp/mysql.sock.urts12 #socket文件的位置
password = ******
user = jia
这样就可以直接进入mySQL的命令行界面了。
# The following options will be passed to all MySQL clients
[client]
port = 3307 #mysql 运行的端口号
socket = /tmp/mysql.sock.urts12 #socket文件的位置
password = ******
user = jia
这样就可以直接进入mySQL的命令行界面了。
2005-06-17
MySQL常见问题解决办法
Interesting Things to Know about MySQL
Mike Chirico (mchirico@users.sourceforge.net)
Copyright (c) 2004 (GPU Free Documentation License)
Last Updated: Mon Nov 22 20:01:59 EST 2004
The latest version of this document can be found at:
http://prdownloads.sourceforge.net/souptonuts/README_mysql.txt?download
Mike Chirico (mchirico@users.sourceforge.net)
Copyright (c) 2004 (GPU Free Documentation License)
Last Updated: Mon Nov 22 20:01:59 EST 2004
The latest version of this document can be found at:
http://prdownloads.sourceforge.net/souptonuts/README_mysql.txt?download
2005-02-25
mysqldump常用的选项
germa83上的mysql有超过3个G的东东,在重装系统时难免要把数据备份,我用的是备份mysql数据库的常见工具,mysqldump。在备份时,我使用的是mysqldump --opt DWBdatabase > DWBdatabase.sql,阅读mysql的手册才知道,其实--opt在4.1版本以上是默认打开的(As of MySQL 4.1, --opt is on by default, but can be disabled with --skip-opt)。在导入数据时我先用create database DWBdatabase,然后用mysql DWBdatabase < DWBdatabase.sql 。这里有一点不方便的是,得先手工建立数据库然后才能导入,当有多个数据库要导入时比较麻烦。不过如果在导出时添加选项--database,即mysqldump --opt --database DWBdatabase > DWBdatabase.sql 就可以避免这样的麻烦。看来仔细阅读手册还是很有用的。总结一下常用用法:
2005-02-01
修改germa83上mysql配置文件的一个选项
今天Thomas让我把germa83上的mysql配置文件修改一下,让mysql不要把每次查询和数据更新记录到log文件里,以提高mysql工作的效率。我在/var/lib/mysql/目录下一看,生成的log文件已经超过2GByte了。找到配置文件/etc/my.cnf,察看了mysql的文档,发现与log-bin这个选项,于是把这个选项给注释掉了。
使用 mysql> SHOW VARIABLES;可以察看很多选项,其中
log_bin | OFF 。修改完后重启mysql server(/etc/init.d/mysql start)。
订阅:
博文 (Atom)