mysql的备份和还原的编码问题解决
今天需要从远程服务器down一个uchome的数据库下来,在本地还原。
发现一个很不爽的事情:远程8G,N核的linux机器,备份还原操作顺溜溜的,可是在本地的windows,2G普通PC上,才100M的文件,用uchome自带的分卷备份还原,基本上中间都会断掉,要么提示“执行时间过长”(改成200秒,分卷为20M都不行),要么就是中途白屏。
得了,用mysqldump备份的一个独立文件来运行命令行还原吧。
首先运行还原语句:
mysql -uroot -p123456 mydatabase < d:\backupdatabase.sql
时间缓慢地逝去,一口水喝完,上个厕所,再溜达一下,终于完成了(在远程linux服务器上也就20秒的功夫!)
然后更新缓存,发现数据乱码了,咦,我备份的时候是强制的gbk编码啊!看看备份的语句:
mysqldump -uroot -p123456 –default-character-set=gbk mydatabase > /usr/local/mysql/backup/backup20091026.sql
没错啊!已经设置了默认字符集为gbk了,看来可能是在还原的时候也要设置吧,于是修改还原语句,手工指定字符编码
mysql -uroot -p123456 font –default-character-set=gbk mydatabase < d:\backupdatabase.sql
又是漫长的等待…刷新页面一看,现在乱码解决了。
总结:在不同的操作系统和数据库环境之间备份与还原时,还是两边都强制制定一个字符集最保险。
相关文档:
1、安装目录:
将my.ini中:
datadir的值更改为:"sql/data/"
basedir的值更改为:"sql"
2、进入sql/data/",删除文件夹外的所有文件。
net start mysql回车……
注意斜线/
修改pswd
方法1:mysqladmin -u root -p "old password" "new password" (此命令无法把秘密清空)
方法2: ......
使用while循环语句生成测试数据:
下面的方法是通过创建一个存储过程,然后再调用这个存储过程来实现的,从网上找了很多方法,但都没有成功。
delimiter // /*定义命令结束符默认为 ; */
create procedure genUsers()
begin
declare i int default 0;
while i < 40 do
insert into users(userID,userName, ......
防止注入的几种办法
其实原来就是我们需要过滤一些我们常见的关键字和符合如:
Select,insert,update,delete,and,*,等等
function inject_check($sql_str) {
return eregi('select|insert|update|delete|\'|\/\*|\*|\.\.\/|\.\/|union|into|load_file
|outfile', $sql_str); & ......
Mysql在默认情况下建立表的字符编码是latin1,所以在插入中文时会出错。
eg:
1、查看表建立的sql源码:
1: sql命令:show create table users
2:
3: 结果:
4: CREATE TABLE `users` (
5: `userID` int(10) unsigned NOT NULL AUTO_INCREMENT,
6: `userName` varchar(4 ......
1.在ORACLE中用select * from all_users显示所有的用户,而在MYSQL中显示所有数据库的命令是show
databases。对于我的理解,ORACLE项目来说一个项目就应该有一个用户和其对应的表空间,而MYSQL项目中也应该有个用户和一个库。在
ORACLE(db2也一样)中表空间是文件系统中的物理容器的逻辑表示,视图、触发器和存储过程也可 ......