本文前提,一定要把原来的数据库产品卸载干净,否则可能会各种奇怪的错误弹出来。以下说正文:
阿里云7.x的公共镜像系统初始化之后,已经为用户安装了大量必须的依赖,例如gcc4.8.5,那么只需要注意卸载yum中自带的mariadb。
卸载之前的mariadb
卸载命令:
# 查找所有在系统内的mariadb rpm -qa | grep mariadb # 强制卸载mariadb 这里打比方说安装了mariadb-libs-5.5.56-2.el7.x86_64 # 那么就用如下命令来对应卸载 rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64
mysql8.0.11安装命令
注意之前不要安装任何一键安装包之类的产品,否则可能会出现无法获取初始root密码的错误。
# 下载mysql源 wget https://repo.mysql.com//mysql80-community-release-el7-1.noarch.rpm # 本地安装mysql源 yum localinstall mysql80-community-release-el7-1.noarch.rpm # 检查本地安装mysql源是否成功 yum repolist enabled | grep "mysql.*-community.*" # 控制台回复以下说明证明ok # mysql-connectors-community/x86_64 MySQL Connectors Community 51 # mysql-tools-community/x86_64 MySQL Tools Community 63 # mysql80-community/x86_64 MySQL 8.0 Community Server 17 # 正式安装mysql 8.0.11 yum install mysql-community-server
在执行yum install指令安装mysql时,可能出现错误,属于正常现象,可以略过,不断循环重复上述yum install mysql-community-server
这个命令即可,直到安装成功。
启动和找回mysql初始root密码
mysql 8.0.x这个版本不知道搞了什么幺蛾子,非常难以找回密码,首次安装成功之后,先使用systemctl命令启动mysql:
systemctl start mysqld # 查看mysql启动状态的命令是: # systemctl status mysqld # 注意,已经不是mysql 5.x时代的service mysqld start之类的命令了
目前通过以下命令来查看log下告知用户的初始密码:
grep 'temporary password' /var/log/mysqld.log # 控制台可能回复以下类似内容 # 2018-06-24T01:00:33.381829Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: ./GblDs7r1cu
这个时候看控制台回复,尾部就是密码。输入登录命令进行登录:
mysql -uroot -p # Enter Password:
这个时候需要你按照控制台给出的初始密码来进mysql。
修改mysql初始root密码
进入mysql之后输入以下sql语句修改密码
use mysql; ALTER USER 'root'@'localhost' IDENTIFIED BY '你的新密码' PASSWORD EXPIRE NEVER;
另外,很多人发现用navicat没办法远程登录mysql 8.0.11的服务器,登录时会报一个considering update client的建议叫你更新客户端,怎么办呢? 原来是mysql 8.0.x把原来mysql 5.x的加密规则给改了,用以下方法修改加密规则(注意:同时允许任何ip地址登录)。
update user set host = '%' where user = 'root'; # 此命令使得用户可以远程任何地点使用root账号登录mysql # 修改mysql密码算法,采用原生算法 ALTER USER 'root'@'%' IDENTIFIED WITH mysql_native_password BY '新密码';
顺便提一嘴,给不太懂mysql的新手看的,如果没有运行第一行命令update掉mysql root账号的可允许登录范围,则下面的修改密码算法的sql命令就是:
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY '新密码';
最后,啰嗦了这么多,运行了这么多命令,别忘了用以下命令让mysql重新读新的权限设定。根本不需要重启mysql服务器。
FLUSH PRIVILEGES;
疑难问题
修改root密码提示密码复杂度不够
真他娘的啰嗦, 老子爱起什么密码起什么密码,用的着你他娘的管?
设定全局变量validate_password.policy, 将它修改成0即可。这个变量的意思是安全级别,默认为MEDIUM
set global validate_password.policy = 0;
其他变量可以通过下方语句来进行微调
mysql> show variables like 'validate_password%'; +--------------------------------------+--------+ | 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 | +--------------------------------------+--------+ 7 rows in set (0.01 sec)
迁移完数据目录发现无法启动mysqld服务, 报错: Error: 13 (Permission denied)
解决思路, 先以下命令查看mysql的错误日志
vim /var/log/mysqld.log
发现报错关键内容是:
mysqld: File './binlog.index' not found (OS errno 13 - Permission denied)
网上千篇一律说chown -R mysql:mysql 你的新数据文件路径就可以了, 如果千篇一律都可以, 那还要答案干啥?
如果按照网上众口一词的转述方法重启mysql仍然解决不了问题, 那么你的问题可能是selinux引起的, 首先编辑selinux配置文档:
vim /etc/selinux/config
找到以下内容
# This file controls the state of SELinux on the system. # SELINUX= can take one of these three values: # enforcing - SELinux security policy is enforced. # permissive - SELinux prints warnings instead of enforcing. # disabled - No SELinux policy is loaded. SELINUX=enforcing
把等号后面改成另外两者: permissive或者disabled
记得重启一下服务器