Ubuntu18.04中安装mysql,及安装过程中遇到的问题解决
1、执行更新命令:
sudo apt upgrade
2、执行mysql安装命令,出现[Y/n]时输入Y:
sudo apt install mysql-server
3、执行查看mysql服务状态命令,如下图所示是运行状态:
sudo service mysql status
4、此时安装的mysql是没有设置密码的,执行sudo mysql,进入mysql命令行,如下
5、设置密码为 localsense,执行如下命令:
set password for 'root'@'localhost' = password('localsense');
6、设置mysql允许被远程,执行如下命令:
GRANT ALL PRIVILEGES ON . TO 'root'@'%'IDENTIFIED BY 'localsense' WITH GRANT OPTION;
7、刷新mysql系统权限,执行命令:
flush privileges;
8、退出mysql命令行:
exit
9、停止mysql服务,执行命令:
sudo service mysql stop
10、更改mysql配置文件
(目录如下:/etc/mysql/mysql.conf.d/mysqld.cnf),在配置文件注掉 bind-address = 127.0.0.1
也可以通过命令实现修改,执行如下命令:
先安装vim:sudo apt install vim
打开文件命令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
把输入法调用英文模式,在键盘输入“i”,进入编辑模式
如上图所示,注释掉后,点击键盘上的“esc”键,在输入“:wq”,回车,文件保存成功。
11、启动mysql服务,执行命令:
sudo service mysql start
12、查看mysql服务状态,执行命令:
sudo service mysql status
Mysql安装完成,并可以远程连接。
其他常见问题:
1、提示密码错误,或者忘记数据库连接密码时:
mysql -u root -p命令去连接mysql时,输入密码总是提示失败,或者忘记密码,可以重新设置mysql密码。
解决办法:
先执行如下命令安装vim:sudo apt install vim。(如果之前安装过,此命令跳过即可)
在终端输入如下命令:sudo vim /etc/mysql/mysql.conf.d/mysqld.cnf
进入到这个配置文件,半角状态下点击键盘上的“i”,进入编辑模式,然后在这个配置文件中的[mysqld]这一块中加入“skip-grant-tables”这句话,如下:
作用:就是让你可以不用密码登录进去mysql。
然后点击键盘中的“Esc”键, 半角模式下输入 :wq,回车退出
A、在终端输入如下命令:service mysql restart 来重启mysql服务
B、在终端上输入如下命令:mysql -u root -p
遇见输入密码的提示直接回车即可,进入mysql后,分别执行下面三句话:
use mysql;
update user authentication_string=password("你的密码") where user="root";
flush privileges;
然后输入quit,退出mysql。
C、重新进入到mysqld.cnf文件中去把刚开始加的skip-grant-tables这条语句给注释掉。如下:
再返回终端输入mysql -u root -p,应该就可以用密码进入数据库了。
2、如果提示的不是密码错误,但是还是连接不上有可能是下面这个原因导致。
A、把skip-grant-tables这个注释去掉使其生效。重启mysql服务,重新进入mysql,先任意选择一个数据库,比如use mysql;
然后输入select user, plugin from user; 看下图:
错误原因是因为plugin root的字段是auth_socket,那我们改掉它,替换为mysql_native_password就行了。输入:
update user set
authentication_string=password("你的密码"),plugin='mysql_native_password' where user='root';
然后回车执行以下,再输入select user,plugin from user;回车,我们能看到root用户的字段改成功了。
最后再给这个语句前加上注释skip-grant-tables,重启mysql服务。
再密码登录,即可成功登录。
3、用navicat远程连接ubuntu 18.04上的mysql时,通过载入的方式,运行服务端数据库脚本,报如下错误时
报错信息如下:Err] 1055 - Expression #1 of ORDER BY clause is not in GROUP BY clause and contains nonaggregated column 'information_schema.PROFILING.SEQ' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by
原因:
在MySQL5.7之后,sql_mode中默认存在ONLY_FULL_GROUP_BY,SQL语句未通过ONLY_FULL_GROUP_BY语义检查所以报错。
ONLY_FULL_GROUP_BY要求select语句中查询出来的列必须是明确的
解决方案:
A、登录msyql
B、执行命令:SELECT @@sql_mode
查询结果如下:
ONLY_FULL_GROUP_BY,STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
C、修改mysqld.cnf:
在mysqld.cnf文件中的[mysqld]节点下添加:
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_ENGINE_SUBSTITUTION
重启mysql服务即可。
4、运行数据库脚本发现提示某表不存在时,是因为大小写问题。
解决办法:可以在数据库配置文件中的[mysqld]节点下添加 lower_case_table_names=1,然后重启mysql服务