mysql FAQ
时间:2006-12-07 来源:leigaiting
首先,MySQL已经有中文手册了,详见 http://dev.mysql.com/doc/refman/5.1/zh/index.html
Q: 如何让我的MySQL支持中文
A:
Q: 如何让我的MySQL支持中文
A:
CODE:
[Copy to clipboard]
以下十几个相关的链接,包括字符集支持等问题,都可以看看
http://bbs.chinaunix.net/viewthread.php?tid=444009&extra=page%3D1%26filter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=732610&extra=page%3D1%26filter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=702090&extra=page%3D1%26filter%3Ddigest
http://imysql.cn/index.php?q=node/20 Q: 如何安装LAMP(Linux+Apache+MySQL+PHP)
A:
http://bbs.chinaunix.net/viewthread.php?tid=444009&extra=page%3D1%26filter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=732610&extra=page%3D1%26filter%3Ddigest
http://bbs.chinaunix.net/viewthread.php?tid=702090&extra=page%3D1%26filter%3Ddigest
http://imysql.cn/index.php?q=node/20 Q: 如何安装LAMP(Linux+Apache+MySQL+PHP)
A:
CODE:
[Copy to clipboard]
http://www.freelamp.com/1003235699/index_html
Q: 如何使用rpm方式安装mysql
A:
A:
CODE:
[Copy to clipboard]
首先下载合适的rpm包,例如下载了文件 MySQL-5.0.15-0.i386.rpm
用一下方法安装:
#rpm -ivhU MySQL-5.0.15-0.i386.rpm
通常情况下,安装完这个rpm包后,只具备有mysqld服务功能,其它相关的client程序和开发包还需要另外安装
#rpm -ivhU MySQL-devel-5.0.15-0.i386.rpm
#rpm -ivhU MySQL-client-5.0.15-0.i386.rpm Q: 如何安装已经编译好了的mysql二进制包
A:
用一下方法安装:
#rpm -ivhU MySQL-5.0.15-0.i386.rpm
通常情况下,安装完这个rpm包后,只具备有mysqld服务功能,其它相关的client程序和开发包还需要另外安装
#rpm -ivhU MySQL-devel-5.0.15-0.i386.rpm
#rpm -ivhU MySQL-client-5.0.15-0.i386.rpm Q: 如何安装已经编译好了的mysql二进制包
A:
CODE:
[Copy to clipboard]
首先下载合适的二进制包,例如下载了文件 mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz
#groupadd mysql
#useradd -g mysql mysql
#cd /usr/local
#tar zxf mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz
#ln -s mysql-standard-4.1.13-pc-linux-gnu-i686 mysql
#cd mysql
#scripts/mysql_install_db --user=mysql
#chgrp -R mysql *
#bin/mysqld_safe --user=mysql &
有什么个性化的配置,可以通过创建 /etc/my.cnf 或者 /usr/local/mysql/data/my.cnf,增加相关的参数来实现。 Q: 如何自己编译mysql
A:
#groupadd mysql
#useradd -g mysql mysql
#cd /usr/local
#tar zxf mysql-standard-4.1.13-pc-linux-gnu-i686.tar.gz
#ln -s mysql-standard-4.1.13-pc-linux-gnu-i686 mysql
#cd mysql
#scripts/mysql_install_db --user=mysql
#chgrp -R mysql *
#bin/mysqld_safe --user=mysql &
有什么个性化的配置,可以通过创建 /etc/my.cnf 或者 /usr/local/mysql/data/my.cnf,增加相关的参数来实现。 Q: 如何自己编译mysql
A:
CODE:
[Copy to clipboard]
以redhat linux 9.0为例:
下载文件 mysql-4.1.13.tar.gz
#tar zxf mysql-4.1.13.tar.gz
#cd mysql-4.1.13
#./configure --prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static --localstatedir=/usr/local/mysql/data \
--with-unix-socket-path=/tmp/mysql.sock --enable-assembler \
--with-charset=complex --with-low-memory --with-mit-threads
#make
#make install
#groupadd mysql
#useradd -g mysql mysql
#chgrp -R mysql /usr/local/mysql/
#/usr/local/mysql/bin/mysqld_safe --user=mysql &
有什么个性化的配置,可以通过创建 /etc/my.cnf 或者 /usr/local/mysql/data/my.cnf,增加相关的参数来实现。 Q: 如何登录MySQL
A:
下载文件 mysql-4.1.13.tar.gz
#tar zxf mysql-4.1.13.tar.gz
#cd mysql-4.1.13
#./configure --prefix=/usr/local/mysql --enable-assembler \
--with-mysqld-ldflags=-all-static --localstatedir=/usr/local/mysql/data \
--with-unix-socket-path=/tmp/mysql.sock --enable-assembler \
--with-charset=complex --with-low-memory --with-mit-threads
#make
#make install
#groupadd mysql
#useradd -g mysql mysql
#chgrp -R mysql /usr/local/mysql/
#/usr/local/mysql/bin/mysqld_safe --user=mysql &
有什么个性化的配置,可以通过创建 /etc/my.cnf 或者 /usr/local/mysql/data/my.cnf,增加相关的参数来实现。 Q: 如何登录MySQL
A:
CODE:
[Copy to clipboard]
使用mysql提供的客户端工具登录
#PATH_TO_MYSQL/bin/mysql -uuser -ppassword dateabase Q: 忘记MySQL的root密码,怎么修改
A:
#PATH_TO_MYSQL/bin/mysql -uuser -ppassword dateabase Q: 忘记MySQL的root密码,怎么修改
A:
CODE:
[Copy to clipboard]
如果 MySQL 正在运行,首先杀之: killall -TERM mysqld。
启动 MySQL :PATH_TO_MYSQL/bin/mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
mysql>use mysql
mysql>update user set password=password("new_pass") where user="root";
mysql>flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL
一定注意:很多新手没有用password=password("..."),而是直接password="..."所以改掉密码不好使 Q: 为什么mysqld起来了,却无法登录,提示"/var/lib/mysql/mysql.sock"不存在
A:
启动 MySQL :PATH_TO_MYSQL/bin/mysqld --skip-grant-tables &
就可以不需要密码就进入 MySQL 了。
然后就是
mysql>use mysql
mysql>update user set password=password("new_pass") where user="root";
mysql>flush privileges;
重新杀 MySQL ,用正常方法启动 MySQL
一定注意:很多新手没有用password=password("..."),而是直接password="..."所以改掉密码不好使 Q: 为什么mysqld起来了,却无法登录,提示"/var/lib/mysql/mysql.sock"不存在
A:
CODE:
[Copy to clipboard]
这种情况大多数是因为你的mysql是使用rpm方式安装的,它会自动寻找 /var/lib/mysql/mysql.sock 这个文件,
通过unix socket登录mysql。
常见解决办法如下:
1、
创建/修改文件 /etc/my.cnf,至少增加/修改一行
[mysql]
[client]
socket = /tmp/mysql.sock
#在这里写上你的mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下
2、
指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式
#mysql -h127.0.0.1 -uuser -ppassword
3、
为 mysql.sock 加个连接,比如说实际的mysql.sock在 /tmp/ 下,则
#ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock即可 Q: 如何修改mysql用户密码
A:
通过unix socket登录mysql。
常见解决办法如下:
1、
创建/修改文件 /etc/my.cnf,至少增加/修改一行
[mysql]
[client]
socket = /tmp/mysql.sock
#在这里写上你的mysql.sock的正确位置,通常不是在 /tmp/ 下就是在 /var/lib/mysql/ 下
2、
指定IP地址,使用tcp方式连接mysql,而不使用本地sock方式
#mysql -h127.0.0.1 -uuser -ppassword
3、
为 mysql.sock 加个连接,比如说实际的mysql.sock在 /tmp/ 下,则
#ln -s /tmp/mysql.sock /var/lib/mysql/mysql.sock即可 Q: 如何修改mysql用户密码
A:
CODE:
[Copy to clipboard]
大致有2种方法:
1、
mysql>mysql -uroot -pxxx mysql
mysql>update user set password=password('new_password') where user='user';;
mysql>flush privileges;
2、
格式:mysqladmin -u用户名 -p旧密码 password 新密码
#mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 Q: 如何新增一个mysql用户
A:
1、
mysql>mysql -uroot -pxxx mysql
mysql>update user set password=password('new_password') where user='user';;
mysql>flush privileges;
2、
格式:mysqladmin -u用户名 -p旧密码 password 新密码
#mysqladmin -uroot -password ab12
注:因为开始时root没有密码,所以-p旧密码一项就可以省略了。 Q: 如何新增一个mysql用户
A:
CODE:
[Copy to clipboard]
格式:grant select on 数据库.* to 用户名@登录主机 identified by "密码"
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
另外,也可以通过直接往user表中插入新纪录的方式来实现。 Q: 如何查看mysql有什么数据库
A:
例1、增加一个用户test1密码为abc,让他可以在任何主机上登录,并对所有数据库有查询、插入、修改、删除的权限。首先用以root用户连入MYSQL,然后键入以下命令:
mysql>grant select,insert,update,delete on *.* to test1@"%" Identified by "abc";
但例1增加的用户是十分危险的,你想如某个人知道test1的密码,那么他就可以在internet上的任何一台电脑上登录你的mysql数据库并对你的数据可以为所欲为了,解决办法见例2。
例2、增加一个用户test2密码为abc,让他只可以在localhost上登录,并可以对数据库mydb进行查询、插入、修改、删除的操作(localhost指本地主机,即MYSQL数据库所在的那台主机),这样用户即使用知道test2的密码,他也无法从internet上直接访问数据库,只能通过MYSQL主机上的web页来访问了。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "abc";
如果你不想test2有密码,可以再打一个命令将密码消掉。
mysql>grant select,insert,update,delete on mydb.* to test2@localhost identified by "";
另外,也可以通过直接往user表中插入新纪录的方式来实现。 Q: 如何查看mysql有什么数据库
A:
CODE:
[Copy to clipboard]
mysql>show databases;
Q: 如何查看数据库下有什么表
A:
A:
CODE:
[Copy to clipboard]
mysql>show tables;
Q: 如何导出数据
A:
A:
CODE:
[Copy to clipboard]
有几种方法,如下:
1、使用mysqldump
#mysqldump -uuser -ppassword -B database --tables table1 --tables table2 > dump_data_20051206.sql
详细的参数
2、backup to语法
mysql>BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory';
详细请查看mysql手册
3、mysqlhotcopy
#mysqlhotcopy db_name [/path/to/new_directory]
或
#mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
或
#mysqlhotcopy db_name./regex/
详细请查看mysql手册
4、select into outfile
详细请查看mysql手册
5、客户端命令行
#mysql -uuser -ppassword -e "sql statements" database > result.txt
以上各种方法中,以mysqldump最常用 Q: 如何在命令行上执行SQL语句
A:
1、使用mysqldump
#mysqldump -uuser -ppassword -B database --tables table1 --tables table2 > dump_data_20051206.sql
详细的参数
2、backup to语法
mysql>BACKUP TABLE tbl_name[,tbl_name...] TO '/path/to/backup/directory';
详细请查看mysql手册
3、mysqlhotcopy
#mysqlhotcopy db_name [/path/to/new_directory]
或
#mysqlhotcopy db_name_1 ... db_name_n /path/to/new_directory
或
#mysqlhotcopy db_name./regex/
详细请查看mysql手册
4、select into outfile
详细请查看mysql手册
5、客户端命令行
#mysql -uuser -ppassword -e "sql statements" database > result.txt
以上各种方法中,以mysqldump最常用 Q: 如何在命令行上执行SQL语句
A:
CODE:
[Copy to clipboard]
#mysql -uuser -ppassword -e "sql statements" database
Q: 如何导入备份出来的文件
A:
A:
CODE:
[Copy to clipboard]
常见几种方法如下:
1、由mysqldump出来的文件
#mysql -uuser -ppassword [database] < dump.sql
2、文件类型同上,使用source语法
mysql>source /path_to_file/dump.sql;
3、按照一定格式存储的文本文件或csv等文件
#mysqlimport [options] database file1 [file2....]
详细请查看mysql手册
4、文件类型同上,也可以使用load data语法导入
详细请查看mysql手册 Q: 如何快速设定MySQL同步
A:
1、由mysqldump出来的文件
#mysql -uuser -ppassword [database] < dump.sql
2、文件类型同上,使用source语法
mysql>source /path_to_file/dump.sql;
3、按照一定格式存储的文本文件或csv等文件
#mysqlimport [options] database file1 [file2....]
详细请查看mysql手册
4、文件类型同上,也可以使用load data语法导入
详细请查看mysql手册 Q: 如何快速设定MySQL同步
A:
CODE:
[Copy to clipboard]
详情请参见 http://imysql.cn/index.php?q=node/73
Q: MySQL升级过程中都应该注意什么问题
A:
A:
CODE:
[Copy to clipboard]
详情请参见 http://imysql.cn/index.php?q=node/74
Q: 如何分析MySQL的运行状态
A:
A:
CODE:
[Copy to clipboard]
介绍一个开源的工具,详情请参考 http://hackmysql.com/mysqlreport
其他更多的FAQ请查看这里
CODE:
[Copy to clipboard]
http://imysql.cn/?q=node/151
"Client does not support authentication protocol requested by server"
A.2.3 Client does not support authentication protocol
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attempts to connect to it with an older client may fail with the following message:
shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client
To solve this problem, you should use one of the following approaches:
1。Upgrade all client programs to use a 4.1.1 or newer client library.
2。When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
3。Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function: mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
Alternatively(或者), use UPDATE and FLUSH PRIVILEGES: mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
Substitute the password you want to use for ``newpwd'' in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.
4。Tell the server to use the older password hashing algorithm:
a。Start mysqld with the --old-passwords option.
b。Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query: mysql> SELECT Host, User, Password FROM mysql.user
-> WHERE LENGTH(Password) > 16;
For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.
For additional background on password hashing and authentication, see section 5.5.9 Password Hashing in MySQL 4.1.
还有一个保证不会出现这个情况的方案,就是一开始编译 php 的时候指定安装的 mysql 的目录:--with-mysql=/path/to/mysql,不要仅用 --with-mysql(这样会使用 php 自带的 mysql 客户端,问题就在这里),在 php 的手册安装章节有提到这个内容。 mysql 字符集
一. 显示字符集
mysqladmin -uroot -pUmcc123 variables | grep character
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
数据库缺省使用latin1 (ISO-8859)
二. 配置字符集
1. 建库时配置字符集
create database testxxx default charset=utf8
3. 建表时配置字符集
CREATE TABLE `t_agent` (
`ID` smallint(5) NOT NULL
) DEFAULT CHARSET=utf8 ;
4. 修改字符集
Windows平台
windows下的mysql配置文件是my.ini,一般在c:\windows\my.ini或者c:\winnt\my.ini可以直接在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql
service mysql restart
或
/etc/init.d/mysql restart
或用其他方法重新启动,就生效了。
[编辑]Unix平台
linux下的mysql配置文件是my.cnf,一般是/etc/my.cnf,如果找不到可以用find命令找一下:
find / -iname my.cnf
在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql
三. 配置排序字符集
myisamchk -r -q --set-character-set=charset
A.2.3 Client does not support authentication protocol
MySQL 4.1 and up uses an authentication protocol based on a password hashing algorithm that is incompatible with that used by older clients. If you upgrade the server to 4.1, attempts to connect to it with an older client may fail with the following message:
shell> mysql
Client does not support authentication protocol requested
by server; consider upgrading MySQL client
To solve this problem, you should use one of the following approaches:
1。Upgrade all client programs to use a 4.1.1 or newer client library.
2。When connecting to the server with a pre-4.1 client program, use an account that still has a pre-4.1-style password.
3。Reset the password to pre-4.1 style for each user that needs to use a pre-4.1 client program. This can be done using the SET PASSWORD statement and the OLD_PASSWORD() function: mysql> SET PASSWORD FOR
-> 'some_user'@'some_host' = OLD_PASSWORD('newpwd');
Alternatively(或者), use UPDATE and FLUSH PRIVILEGES: mysql> UPDATE mysql.user SET Password = OLD_PASSWORD('newpwd')
-> WHERE Host = 'some_host' AND User = 'some_user';
mysql> FLUSH PRIVILEGES;
Substitute the password you want to use for ``newpwd'' in the preceding examples. MySQL cannot tell you what the original password was, so you'll need to pick a new one.
4。Tell the server to use the older password hashing algorithm:
a。Start mysqld with the --old-passwords option.
b。Assign an old-format password to each account that has had its password updated to the longer 4.1 format. You can identify these accounts with the following query: mysql> SELECT Host, User, Password FROM mysql.user
-> WHERE LENGTH(Password) > 16;
For each account record displayed by the query, use the Host and User values and assign a password using the OLD_PASSWORD() function and either SET PASSWORD or UPDATE, as described earlier.
For additional background on password hashing and authentication, see section 5.5.9 Password Hashing in MySQL 4.1.
还有一个保证不会出现这个情况的方案,就是一开始编译 php 的时候指定安装的 mysql 的目录:--with-mysql=/path/to/mysql,不要仅用 --with-mysql(这样会使用 php 自带的 mysql 客户端,问题就在这里),在 php 的手册安装章节有提到这个内容。 mysql 字符集
一. 显示字符集
mysqladmin -uroot -pUmcc123 variables | grep character
| character_set_client | latin1 |
| character_set_connection | latin1 |
| character_set_database | latin1 |
| character_set_results | latin1 |
| character_set_server | latin1 |
| character_set_system | utf8 |
| character_sets_dir | /usr/local/share/mysql/charsets/ |
数据库缺省使用latin1 (ISO-8859)
二. 配置字符集
1. 建库时配置字符集
create database testxxx default charset=utf8
3. 建表时配置字符集
CREATE TABLE `t_agent` (
`ID` smallint(5) NOT NULL
) DEFAULT CHARSET=utf8 ;
4. 修改字符集
Windows平台
windows下的mysql配置文件是my.ini,一般在c:\windows\my.ini或者c:\winnt\my.ini可以直接在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql
service mysql restart
或
/etc/init.d/mysql restart
或用其他方法重新启动,就生效了。
[编辑]Unix平台
linux下的mysql配置文件是my.cnf,一般是/etc/my.cnf,如果找不到可以用find命令找一下:
find / -iname my.cnf
在这个文件里面加上
default-character-set=gbk #或gb2312,big5,utf8
然后重新启动mysql
三. 配置排序字符集
myisamchk -r -q --set-character-set=charset
相关阅读 更多 +