查看 mysql 的 repo 源,进去找到自己系统的版本并选择对应mysql版本。我的主机是 Centos7 x64
http://repo.mysql.com/
选择一个版本并下载到主机:
wget http://repo.mysql.com/mysql-community-release-el7-9.noarch.rpm
然后安装 rpm 包:
安装好 rpm 包之后我们将获得两个 yum 源:
接下来安装 mysql :
yum install mysql-server
接下来设置 mysqladmin 用户的初始密码:
mysqladmin -u root -p password xxxxx # 因为初始是没有密码的,所以 -p 后面的旧密码可以不写。建议此处密码不要与 Linux 系统密码一致
但我在此处登录是出现一个错误 ----> ERROR 2002 (HY000): Can‘t connect to local MySQL server through socket ‘/var/lib/mysql/mysql.sock‘
原因是/var/lib/mysql的访问权限问题。下面的命令把/var/lib/mysql的拥有者改为当前用户:
chown -R user:group /var/lib/mysql
现在进入 mysql ,执行 ” flush privileges; “ 命令。 注:flush privileges的意思是强制刷新内存授权表,否则用的还是缓冲中的口令。
为了加强安全性,MySQL5.7为root用户随机生成了一个密码,在error_log中,关于error_log的位置,如果安装的是RPM包,则默认是 /var/log/mysqld.log 。
grep " temporary password" /var/log/mysqld.log
#查看随机生成的密码。
利用随机密码登录mysql后,会要求我们修改密码。
此时我们无法利用 mysqladmin 重置密码,但必须要重新修改密码才能登录mysql。
此时修改/etc/my.cnf, 在 [mysqld] 最后行加上 skip-grant-tables,然后重新启动mysql服务既可无认证登录mysql;
这时登入mysql,修改密码:
UPDATE mysql.user SET authentication_string =PASSWORD('新密码') WHERE User='xxx';
这时将/etc/my.cnf中skip-grant-tables注释,然后重启mysql。
利用修改后的密码登录msyql, 但是,我又遇到一个坑。无法使用和查看数据库,要叫我重置密码。麻蛋!
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
修改密码:
ALTER USER 'root'@'localhost' IDENTIFIED BY '新密码';
但是,它会有密码复杂度的限制的报错:
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
又要修改密码复杂度才行:
set global validate_password_policy=0;
#更改密码强度
set global validate_password_length=4;
#设置最低长度
修改mysql监听IP:
vim /etc/my.cnf
#bind-address=0.0.0.0
bind-address=127.0.0.1
新建用户:
CREATE USER zhang@localhost IDENTIFIED BY '密码';
flush privileges;
修改用户密码:
UPDATE mysql.user SET password=PASSWORD('新密码') WHERE User='用户名' and host='xxx';
FLUSH PRIVILEGES;
删除用户:
delete from user where user=”xxx" and host="xxx";
flush privileges;
开放3306端口:
vi /etc/sysconfig/iptables
添加以下内容:
-A INPUT -p tcp -m state --state NEW -m tcp --dport 3306 -j ACCEPT
保存后重启防火墙:
service iptables restart
这样从其它客户机也可以连接上mysql服务了。
开启MySQL命令自动补全功能:
>vim /etc/my.cnf
[mysql]
#no-auto-rehash
auto-rehash
systemctl restart mysql