MySQL在Linux下的安装配置与除错
MySQL8.0的一些特点:
1.废弃了8以前版本的password()函数,修改密码不便.
2.采用caching_sha2_password加密方式,很多客户端不支持.
一.yum安装
由于CentOS7的base仓库默认使用MariaDB来替代MySQL,需要配置源(其他发行,如:Ubuntu则不需要,可直接apt-get install mysql*).
首先进入官网看看:
https://dev.mysql.com/downloads/repo/yum/
看到最下方,选择一个版本(也可以wget命令方式下载,看后面):
可以使用以下命令查看内核版本:
uname -a
你既可以在浏览器中下载,也可以找到你要下载的文件的url,使用命令:
wget -i -c http://dev.mysql.com/get/mysql80-community-release-el7-1.noarch.rpm
下载完成后,你可以使用
yum install mysql80-community-release-el7-1.noarch.rpm
也可使用
rpm -i mysql80-community-release-el7-1.noarch.rpm
进行配置文件的安装.安装完成后你会在/etc/yum.repos/看到多出两个文件
mysql-community.repo 和 mysql-community-source.repo
这便是源的配置文件了,接下来使用命:
yum -y install mysql-community-server
即可完成安装. 另外,使用yum安装mysql后会自动覆盖系统安装的mariadb.对于一些新版本或包安装的MariaDB,可能需要先将其卸载(yum remove MariaDB*),然后才能成功安装mysql.同时,在卸载的时候需要注意,yum remove ...会将依赖一起删除,而这些依赖被其他程序所用,可使用rpm -e --nodeps file来指定卸载安装包而不删除依赖.另外,在安装前需要关闭其他的数据库进程,这是我经常犯的错误.
二.包安装
这部分可以看官方文档:
https://dev.mysql.com/downloads/mysql/
里面有各个版本的安装指导,全英文,以后有空我会再来补充.
三.MySQL配置
开启MySQL:
systemctl start mysqld
使用命令:
systemctl status mysql或者netstat -tunlp | grep 3306都可查看到服务是否开启.
登陆时,密码可以去/var/log/mysql.log查看.如果不需要密码则直接回车就登陆.(通常MySQL默认需要密码且登陆后会提醒你使用ALTER USER语句修改用户密码,而MariaDB默认不需要)
修改用户密码可使用SQL修改密码语句也可UPDATE数据库mysql中表user的相关记录,两者原理都是更新数据库mysql中的表user.(SQL语句可以自己找教程)
如果忘记密码,可以跳过权限认证:
编辑/etc/my.conf,然后在[mysqld]中添加 skip-grant-tables.
然后启动或重启mysqld.
这时不用密码登陆mysql:
mysql -u root
以--skip-grant-tables方式登陆的root无法使用alter user...和create user...等操作,只能在mysql.user表中更新记录,而且不能使用password()函数(因为8.0已经废弃了password函数),可以有以下两种解决方法:
(1)算出你的新密码用caching_sha2_password加密后的字符,然后使用
update mysql.user set authentication_string="字符串" where user="root" and host="登陆ip";
(2)将authentication_string置为空
update mysql.user set authentication_string="" where user="root" and host="登陆ip";
然后去/etc/my.conf中删除skip-grant-tables,此时重启mysqld后,你就可以用空密码直接登陆,然后使用
alter user "root"@"主机ip" identified by "新密码";
完成密码修改.(目前在mysqld中修改密码,我只发现alter user...和直接更新mysql.user有用)
四.除错
1.启动失败
如果你之前安装过MariaDB或其他版本MySQL,当安装完成后,想要开启MySQL时,可能失败.
使用命令:
systemctl status mysqld 或 journalctl -xe
可以查看除错日志,一般会告诉你清空/var/lib/mysql中的内容,然后再重新开启mysqld就可以了.
原因可能与socket连接和数据库dir有关,在/etc/my.conf中:
datadir=/var/lib/mysql
socket=/var/lib/mysql/mysql.sock
/var/lib/mysql中的文件mysql.sock,这个文件用于连接数据库(本地或TCP/IP连接),不同的数据库配置不同.同时数据保存的记录也可能有差异.所以上一数据库的/var/lib/mysql目录中的内容在现在的数据库中无法使用,导致启动失败.删除该目录内的所有内容后,再重启数据库,可将新的配置文件写入该目录,启动成功.
2.某些客户端不支持caching_sha2_password加密方式
(1)修改/etc/my.conf,在[mysqld]中添加 default-authentication-plugin=mysql_native_password,或者直接将原来这条记录前的"#"去掉.
仅对新用户有效.
(2)update mysql.user set default-authentication-plugin=mysql_native_password where user="root" and host="登陆ip";
这中方式对所有用户有效,理论上没问题,没有实践过.
3.密码设置失败
可能与全局变量validate_password.policy有关(也可能是validate_password_policy).有以下取值
Policy | Tests Performed |
---|---|
0 or LOW
|
Length |
1 or MEDIUM
|
Length; numeric, lowercase/uppercase, and special characters |
2 or STRONG
|
Length; numeric, lowercase/uppercase, and special characters; dictionary file |
查看改变量:
show variables like 'validate_password%'; (查看是validate_password.policy还是validate_password_policy)
| Variable_name | Value |
+--------------------------------------+-------+
| validate_password.check_user_name | ON |
| validate_password.dictionary_file | |
| validate_password.length | 8 |
| validate_password.mixed_case_count | 1 |
| validate_password.number_count | 1 |
| validate_password.policy | MEDIUM
|
| validate_password.special_char_count | 1 |
+--------------------------------------+-------+
修改该变量的值:
set global validate_password.policy=0;
4.系统操作在~/.mysql_history无记录
MariaDB的所有操作都会保存在该文件中,而MySQL则不是,一些系统操作如"set global ...=...","create user ... identified by ..."等不会保存在其中,出现错误时无法使用上下键调出错误语句进行修改,必须重写.应该与某些全局变量,系统变量或者是插件有关,暂时没找到,以后会来补充.
转载于:https://my.oschina.net/u/3887035/blog/1862333