主页
软件技术
返回
一些MySQL的常见问题

        Q: 如何登录MySQL

        使用mysql提供的客户端工具登录

        #PATH_TO_MYSQL/bin/mysql -uuser -ppassword dateabase

        Q: 忘记MySQL的root密码,怎么修改

        如果 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"不存在

        这种情况大多数是因为你的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用户密码

        大致有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用户

        格式: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有什么数据库

        mysql>show databases;

        Q: 如何查看数据库下有什么表

        mysql>show tables;

        Q: 如何导出数据

        有几种方法,如下:

        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语句

        #mysql -uuser -ppassword -e "sql statements" database

        Q: 如何导入备份出来的文件

        常见几种方法如下:

        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添加root远程登录权限

        默认情况下,MySQL之允许本地登录,需要修改/etc/mysql/my.cnf文件:

        注释这一行:

        bind-address=127.0.0.1 ==> #bind-address=127.0.0.1

        对于需要远程登录的用户执行如下命令:

        mysql> GRANT ALL PRIVILEGES ON *.* TO root@"%" IDENTIFIED BY "yourpasswd";

        mysql> flush privileges;

        Q: 如何MySQL备份与恢复

        备份数据库(包含全部表和全部存储过程):

        C:Documents and SettingsAdministrator>mysqldump -h localhost -u root -p -R bannei >d:/

        log/mydb.sql

        Enter password: ******

        //备份数据库所有表

        C:Documents and SettingsAdministrator>mysqldump -h localhost -u root -p jxhxt >d:/log/bn2010-01-29.sql

        Enter password: ******

        //备份数据库中指定表数据

        C:Documents and SettingsAdministrator>mysqldump -h localhost -u root -p jxhxt invite_mail >d:/log/bn2010-01-29.sql

        Enter password: ******

        //备份全部存储过程

        C:Documents and SettingsAdministrator>mysqldump -h localhost -u root -p -t -d -R bannei >d:/log/myproc.sql

        Enter password: ******

        //导出一个数据库结构

        C:Documents and SettingsAdministrator>mysqldump -u root -p -d --add-drop-table ruyi_db>d: uyi_db.sql

        //导入数据文件

        C:Documents and SettingsAdministrator>mysql -h localhost -u root -p bannei <d:/log/mydb.sql

        Enter password: ******

        导入数据库,常用source 命令

        进入mysql数据库控制台,如mysql -u root -p

        mysql>use 数据库

        然后使用source命令,后面参数为脚本文件(如这里用到的.sql)

        mysql>source d: uyi_db.sql

        1、mysqldump

        1.1 备份

        mysqldump 是采用SQL级别的备份机制,它将数据表导成 SQL 脚本文件,在不同的 MySQL 版本之间升级时相对比较合适,这也是最常用的备份方法。

        现在来讲一下 mysqldump 的一些主要参数:

        1.--compatible=name

        它告诉 mysqldump,导出的数据将和哪种数据库或哪个旧版本的 MySQL 服务器相兼容。值可以为 ansi、 mysql323、mysql40、postgresql、oracle、mssql、db2、maxdb、no_key_options、 no_tables_options、no_field_options 等,要使用几个值,用逗号将它们隔开。当然了,它并不保证能完全兼容,而是尽量兼容。

        2.--complete-insert,-c

        导出的数据采用包含字段名的完整 INSERT 方式,也就是把所有的值都写在一行。这么做能提高插入效率,但是可能会受到 max_allowed_packet 参数的影响而导致插入失败。因此,需要谨慎使用该参数,至少我不推荐。

        3.--default-character-set=charset

        指定导出数据时采用何种字符集,如果数据表不是采用默认的 latin1 字符集的话,那么导出时必须指定该选项,否则再次导入数据后将产生乱码问题。

        4.--disable-keys

        告诉 mysqldump 在 INSERT 语句的开头和结尾增加 /*!40000 ALTER TABLE table DISABLE KEYS */; 和 /*!40000 ALTER TABLE table ENABLE KEYS */; 语句,这能大大提高插入语句的速度,因为它是在插入完所有数据后才重建索引的。该选项只适合 MyISAM 表。

        5.--extended-insert = true|false

        默认情况下,mysqldump 开启 --complete-insert 模式,因此不想用它的的话,就使用本选项,设定它的值为 false 即可。

        6.--hex-blob

        使用十六进制格式导出二进制字符串字段。如果有二进制数据就必须使用本选项。影响到的字段类型有 BINARY、VARBINARY、 BLOB。

        7.--lock-all-tables,-x

        在开始导出之前,提交请求锁定所有数据库中的所有表,以保证数据的一致性。这是一个全局读锁,并且自动关闭 --single-transaction 和 --lock-tables 选项。

        8.--lock-tables

        它和 --lock-all-tables 类似,不过是锁定当前导出的数据表,而不是一下子锁定全部库下的表。本选项只适用于 MyISAM 表,如果是 Innodb 表可以用 --single-transaction 选项。

        9.--no-create-info,-t

        只导出数据,而不添加 CREATE TABLE 语句。

        10.--no-data,-d

        不导出任何数据,只导出数据库表结构。

        11.--opt

        这只是一个快捷选项,等同于同时添加 --add-drop-tables --add-locking --create-option --disable-keys --extended-insert --lock-tables --quick --set-charset 选项。本选项能让 mysqldump 很快的导出数据,并且导出的数据能很快导回。该选项默认开启,但可以用 --skip-opt 禁用。注意,如果运行mysqldump 没有指定 --quick 或 --opt 选项,则会将整个结果集放在内存中。如果导出大数据库的话可能会出现问题。

        12.--quick,-q

        该选项在导出大表时很有用,它强制 mysqldump 从服务器查询取得记录直接输出而不是取得所有记录后将它们缓存到内存中。

        13.--routines,-R

        导出存储过程以及自定义函数。

        14.--single-transaction

        该选项在导出数据之前提交一个 BEGIN SQL语句,BEGIN 不会阻塞任何应用程序且能保证导出时数据库的一致性状态。它只适用于事务表,例如 InnoDB 和 BDB。

        本选项和 --lock-tables 选项是互斥的,因为 LOCK TABLES 会使任何挂起的事务隐含提交。

        要想导出大表的话,应结合使用 --quick 选项。

        15.--triggers

        同时导出触发器。该选项默认启用,用 --skip-triggers 禁用它。

        其他参数详情请参考手册,我通常使用以下 SQL 来备份 MyISAM 表:

        /usr/local/mysql/bin/mysqldump -uyejr -pyejr

        --default-character-set=utf8 --opt --extended-insert=false

        --triggers -R --hex-blob -x db_name > db_name.sql

        使用以下 SQL 来备份 Innodb 表:

        /usr/local/mysql/bin/mysqldump -uyejr -pyejr

        --default-character-set=utf8 --opt --extended-insert=false

        --triggers -R --hex-blob --single-transaction db_name > db_name.sql

        另外,如果想要实现在线备份,还可以使用 --master-data 参数来实现,如下:

        /usr/local/mysql/bin/mysqldump -uyejr -pyejr

        --default-character-set=utf8 --opt --master-data=1

        --single-transaction --flush-logs db_name > db_name.sql

        它只是在一开始的瞬间请求锁表,然后就刷新binlog了,而后在导出的文件中加入CHANGE MASTER 语句来指定当前备份的binlog位置,如果要把这个文件恢复到slave里去,就可以采用这种方法来做。

        1.2 还原

        用 mysqldump 备份出来的文件是一个可以直接倒入的 SQL 脚本,有两种方法可以将数据导入。

        1.直接用 mysql 客户端

        例如:

        /usr/local/mysql/bin/mysql -uyejr -pyejr db_name < db_name.sql

        2.用 SOURCE 语法

        其实这不是标准的 SQL 语法,而是 mysql 客户端提供的功能,例如:

        SOURCE /tmp/db_name.sql;

        这里需要指定文件的绝对路径,并且必须是 mysqld 运行用户(例如 nobody)有权限读取的文件。

        


潘旭强:倡导实用、艺术、创意三者相融的设计
安全法律法规词典:作业场所职业危害申报管理办法
09年一级建造师考试《法规及相关知识》辅导资料(137)
非煤矿山爆破器材和爆破作业管理
布鲁塞尔机场的十大失败之处
班组建设安全管理之“十字”
时评:旅游地产持续升温 养生地产潜力无限
牟红波:坚持做自己的创新设计
信息发布:名易软件http://www.myidp.net