Mysql常见问题解决及命令(5.0以后的)

连接mysql(这个应该是最常见的了)

mysql -u用户名 -p密码
这是登录,当然登录的时候一般不输入明文密码,输完-p直接回车,然后可以输入密码登录。

如果你安装了mysql之后没有输入密码(windows的最有可能),而造成了mysql不可以在外网或者外部使用工具连接(这种问题很常见),那么你就需要这条设置密码的命令了。在登入mysql终端的情况下输入:

mysql> SET PASSWORD FOR 'root'@'localhost(可以为%)' = PASSWORD('newpass');

或者在命令终端使用mysqladmin来设置,比如:

mysqladmin -u root password "newpass";

修改密码可以可以试试:

mysqladmin -u root password oldpass "newpass";

忘记密码连mysql的命令行都登不进去了?那你或许可以:

第一步当然是杀死mysql,比如(ubuntu):
service mysql stop;
然后当mysql停止之后就可以用下面的命令了(安全启动mysql并且不启动授权表)
mysqld_safe --skip-grant-tables&
做好之后可以直接使用mysql命令直接登录到mysql终端
mysql 或者 mysql -uroot -p
再你登录到mysql终端之后,关键来了,在mysql5.0之后mysql会默认有一个库叫mysql,里面保存着所有信息,包括mysql登录的各个账号的信息,这些信息都是以mysql表中数据的形式存在,使用Update命令就可以修改mysql密码PASSWORD函数是mysql的自带函数可以将mysql密码加密成SHA1:
mysql> UPDATE user SET authentication_string=PASSWORD("new password") WHERE user='root';(在网上有一些的文章或者教程都是SET password,这是错误的,mysql的user表中并没有这个字段)
修改密码后刷新Mysql系统权限表,不然有些时候会拒绝登录(最好是重启下mysql):
mysql> FLUSH PRIVILEGES;
重启服务器

登录密码设置好了,但是还是没办法远程登录?登录的时候会报错?给你两个方法:

1、修改mysql的配置文件my.cnf(不同的系统和版本叫的名字不一样),里面有这么一行
bind-address 127.0.0.1
把这一行的127.0.0.1改成0.0.0.0然后重启mysql就可以外连了,但是有些mysql还需要配置外连账号,比如你使用root外连,就需要命令:
grant all(select,update,insert,delete) on *(库名).*(表名) to "用户名"@“%(特定IP)” identified by "连接密码(可以随便设置)";
该条命令是给某账号分配某库或表的某一权限,分配完成之后就可以连接了。
2、嫌第一种麻烦?ssh连接服务器,然后数据库连接localhost就可以了,这种最简单,不过只能局限于某些软件有这些功能,比如特别好用的navicat。

mysql还有一个常常遇到的问题,字符集,按照标准来说,一般开发时用到的字符集都是UTF-8,但是有时候却会有人在建站的时候选择gbk,这个时候使用MySQL就很有可能出现乱码的状况,在乱码的时候如何查看是否是字符集出的问题,这个时候就可以使用MySQL很常用的STATUS命令:

Connection id:      4
Current database:   
Current user:       root@localhost
SSL:            Not in use
Current pager:      stdout
Using outfile:      ''
Using delimiter:    ;
Server version:     5.7.16-0ubuntu0.16.04.1 (Ubuntu)
Protocol version:   10
Connection:     Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:        /var/run/mysqld/mysqld.sock
Uptime:         8 min 49 sec

Threads: 1  Questions: 5  Slow queries: 0  Opens: 107  Flush tables: 1 Open tables: 26  Queries per second avg: 0.009

从上面可以看出服务器和数据库的字符集是latin1,客户端和连接的字符集是utf8,而修改字符集的方法是使用命令或写入配置文件,而命令修改是:

SET character_set_client = utf8;设置客户端(php也算客户端)发过来的字符集
SET character_set_results = utf8;设置给客户端发送的字符集
SET character_set_connection = utf8;用于连接的字符集 
数据库的字符集一定要与通讯的字符集相同,不然也会出现乱码,而数据库的字符集一般在创建的时候就已经确定,修改的话可以使用数据库工具连接修改,比如Navicat。

还有一个常见的数据库问题就是mysqld.sock丢失,mysqld_safe这个安全连接的时候会删除mysqld.sock,像这种问题比较简单的解决办法就是重启服务器,在mysql重新启动的时候会自动创建mysqld.sock,如果想使用一个不同的套接字那么可以在/etc/my.cnf中设置,里面有这两个选项:

[mysqld]
socket=/usr/local/var/mysql.sock
[mysqld_safe]
socket=/usr/local/var/mysql.sock

create by 任庆彬