【从安装到入门】MySQL安装篇

510 阅读5分钟
作者 日期 天气
元公子 2020-01-21(周二) 有些冻手冻脚的东莞

你知道的越少,你不知道的就越少

没有朋友的点赞,就没法升级打怪

一、缘起

最近想学习下MySQL的主从复制和集群,发现虚拟机中的版本有些旧,打算升级下。原来的版本是8.0.11,看了下最新的小版本为8.0.19,升级版本还是比较容易,与首次安装时的命令基本差不多,文章尾部会讲到。考虑到有首次接触的同学在,这里就从首次安装部署开始讲起,再到更新版本结束。

二、环境准备

  • 示例使用Centos7 64位操作系统

三、下载安装包

本文采用离线和在线两种安装方式进行讲解。离线安装是先从官网下载二进制的安装文件,再传入服务器进行安装。在线安装是从官网下载repo仓库文件,传入服务器后通过安装命令自动下载和安装,服务器需可以联网。

  • 离线安装包地址:前往,选择操作系统和版本后,下载.tar安装包
    下载页
  • 在线安装仓库文件地址:前往,按操作系统版本选择(本实例选择centos7)

下载页

四、开始安装

1. 清除系统已安装的MySQL软件和MariaDB

检查并删除mariadb软件(不存在则忽略)

[root@db1 /root]# rpm -qa|grep mariadb 
mariadb-libs-5.5.56-2.el7.x86_64
[root@db1 /root]# sudo yum remove mariadb
# 或者rpm方式删除
# [root@db1 /root]# rpm -e --nodeps mariadb-libs-5.5.56-2.el7.x86_64

检查并删除mysql软件

[root@db1 /root]# rpm -qa | grep -i mysql  
mysql-community-test-8.0.11-1.el7.x86_64
mysql-community-client-8.0.19-1.el7.x86_64
mysql-community-embedded-compat-8.0.19-1.el7.x86_64
mysql80-community-release-el8-1.noarch
mysql-community-server-8.0.19-1.el7.x86_64
mysql-community-common-8.0.19-1.el7.x86_64
mysql-community-libs-compat-8.0.19-1.el7.x86_64
mysql-community-libs-8.0.19-1.el7.x86_64
mysql-community-devel-8.0.19-1.el7.x86_64
[root@db1 /root]# sudo yum -y remove  mysql-community-{client,common,devel,embedded,libs,server,test}-*
[root@db1 /root]# sudo yum -y remove  mysql80-community-release-el8-1.noarch
[root@db1 /root]# find / -name mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/share/mysql
[root@db1 /root]# rm -rf /var/lib/mysql
[root@db1 /root]# rm -rf /var/lib/mysql/mysql
[root@db1 /root]# rm -rf /usr/share/mysql

2. 离线式安装

本示例离线包放在/root/download目录下,客观您随意

[root@db1 /root]# sudo yum -y install openssl-devel
[root@db1 /root]# sudo yum -y install perl-JSON
[root@db1 /root/download]# tar -xvf mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar
[root@db1 /root/download]# sudo yum -y install mysql-community-{client,common,devel,embedded,libs,server}-*
[root@db1 /root/download]# mysql -V
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

3. 在线式安装

本示例仓库文件放在/root/download目录下,客观您随意

[root@db1 /root/download]# sudo yum -y install mysql80-community-release-el7-3.noarch.rpm
[root@db1 /root/download]# sudo yum -y install mysql-community-server
[root@db1 /root/download]# mysql -V
mysql  Ver 8.0.19 for Linux on x86_64 (MySQL Community Server - GPL)

五、弄弄配置

MySQL默认用户为root,但是密码不清楚。所以按官方要求,先启动服务,从日志文件中查找初始密码,然后修改成自己的密码。

[root@db1 /root/download]# service mysqld start
Redirecting to /bin/systemctl start mysqld.service
[root@db1 /root/download]# cat /var/log/mysqld.log | grep password
2020-01-21T07:33:27.975342Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: AFM?9U>n!>j&
# 登录mysql,密码为AFM?9U>n!>j&,可复制粘贴。
[root@db1 /root/download]# mysql -uroot -p
# 显示密码相关的变量
mysql> show variables like 'validate_password%';
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.
# 使用前,需重置密码
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
ERROR 1819 (HY000): Your password does not satisfy the current policy requirements
# 密码太简单。由于默认密码策略太高,修改下默认策略(重启失效)
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=4;
mysql> alter user 'root'@'localhost' identified with mysql_native_password by '123456';
# 修改此账户可以远程登录MySQL
mysql> show databases;
mysql> use mysql;
mysql> select user, host, plugin, authentication_string from user;
mysql> update user set host='%' where user = 'root';
# 由于直接操作表,需刷新内存生效。记录重启指令mysql> restart;
mysql> flush privileges;
mysql> exit
Bye

创建MySQL新账户

# 密码刚修改为123456
[root@db1 /home/dev/download]# mysql -uroot -p123456
mysql> set global validate_password.policy=0;
mysql> set global validate_password.length=4;
mysql> create user 'dev'@'%' identified by '123456';
# 查看用户权限
mysql> show grants for 'dev'@'%';
+---------------------------------+
| Grants for dev@%                |
+---------------------------------+
| GRANT USAGE ON *.* TO `dev`@`%` |
+---------------------------------+
1 row in set (0.00 sec)
# 赋予所有权限
mysql> grant all privileges on *.* to 'dev'@'%';
# 或者按需赋权,授权基本的查询修改权限(参考)
# mysql> GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON *.* TO 'dev'@'%';
# GRANT指令无需使用 flush privileges;
mysql> exit

MySQL服务命令

  • 服务停止:service mysqld stop
  • 服务启动:service mysqld start
  • 服务重启:service mysqld restart
  • 服务状态:service mysqld status

主要目录信息

配置文件 /etc/my.cnf
数据目录 /var/lib/mysql
日志目录 /var/log
服务文件 /lib/systemd/system/mysqld.service
执行文件 /usr/sbin/mysqld

六、更新小迭代版本

下载对应操作系统的版本,重新安装一次即可升级。大版本视情况而定,需看官方升级文档了解。

[root@db1 /root/download]# tar -xvf mysql-8.0.19-1.el7.x86_64.rpm-bundle.tar
[root@db1 /root/download]# sudo yum -y install mysql-community-{client,common,devel,embedded,libs,server}-*

七、偶遇的坑

  1. ERROR 1819 (HY000): Your password does not satisfy the current policy requirements

validate_password_number_count指定了密码中数字的长度 validate_password_special_char_count指定了密码中特殊字符的长度 validate_password_mixed_case_count指定了密码中大小字母的长度

mysql> show variables like 'validate_password%';
| 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      |

#修改
mysql> set global validate_password.policy=0;
mysql> select @@validate_password.policy;
mysql> set global validate_password.length=4;
mysql> select @@validate_password.length;
# 以下非必须
mysql> set global validate_password.special_char_count=0;
mysql> select @@validate_password.special_char_count;
mysql> set global validate_password.number_count=0;
mysql> select @@validate_password.number_count;
  1. 生成用户随机密码

    suijimimashengcheng.51240.com

附录:

配置文件(my.cnf)一些记录

## 可修改默认引擎
default-storage-engine=InnoDB