Mysql使用yum(dnf)安装
为了数据安全、性能等各方面的原因,一般生产环境中,可以将mysql直接在宿主机上运行,不使用docker,mysql yum安装(dnf 和yum 配置一样)的配置如下:
下载 yum 源
官网地址: https://dev.mysql.com/downloads/repo/yum/
下载指定 的rpm包上传到服务器上,这里我下载的是mysql80-community-release-el8-1.noarch.rpm
[root@www ~]# pwd
/root
[root@www ~]# ll
-rw-r--r-- 1 root root 30388 Apr 10 11:08 mysql80 mysql80-community-release-el8-1.noarch.rpm
安装yum源
以下三个命令任选择一种即可
## 使用 yum安装
[root@www ~]# yum install mysql80 mysql80-community-release-el8-1.noarch.rpm -y
## 使用 dnf 安装
[root@www ~]# dnf install mysql80 mysql80-community-release-el8-1.noarch.rpm -y
## 使用 rpm 安装
[root@www ~]# rpm -ivh mysql80 mysql80-community-release-el8-1.noarch.rpm
执行完成后,会在 /etc/yum.repos.d/
目录生成 mysql-community.repo
和 mysql-community-source.repo
文件
[root@www ~]# ll /etc/yum.repos.d/
total 88
-rw-r--r--. 1 root root 731 Jun 3 2020 CentOS-AppStream.repo
-rw-r--r--. 1 root root 712 Jun 3 2020 CentOS-Base.repo
-rw-r--r--. 1 root root 798 Jun 3 2020 CentOS-centosplus.repo
-rw-r--r--. 1 root root 1043 Jun 3 2020 CentOS-CR.repo
-rw-r--r--. 1 root root 668 Jun 3 2020 CentOS-Debuginfo.repo
-rw-r--r--. 1 root root 743 Jun 3 2020 CentOS-Devel.repo
-rw-r--r--. 1 root root 756 Jun 3 2020 CentOS-Extras.repo
-rw-r--r--. 1 root root 338 Jun 3 2020 CentOS-fasttrack.repo
-rw-r--r--. 1 root root 738 Jun 3 2020 CentOS-HA.repo
-rw-r--r--. 1 root root 928 Jun 3 2020 CentOS-Media.repo
-rw-r--r--. 1 root root 736 Jun 3 2020 CentOS-PowerTools.repo
-rw-r--r--. 1 root root 1382 Jun 3 2020 CentOS-Sources.repo
-rw-r--r--. 1 root root 74 Jun 3 2020 CentOS-Vault.repo
-rw-r--r--. 1 root root 2424 Jul 25 2020 docker-ce.repo
-rw-r--r--. 1 root root 1177 Nov 1 04:31 epel-modular.repo
-rw-r--r--. 1 root root 1259 Nov 1 04:31 epel-playground.repo
-rw-r--r--. 1 root root 1114 Nov 1 04:31 epel.repo
-rw-r--r--. 1 root root 1276 Nov 1 04:31 epel-testing-modular.repo
-rw-r--r--. 1 root root 1213 Nov 1 04:31 epel-testing.repo
-rw-r--r-- 1 root root 995 Oct 4 2019 mysql-community.repo
-rw-r--r-- 1 root root 1050 Oct 4 2019 mysql-community-source.repo
-rw-r--r--. 1 root root 160 Dec 10 2019 wlnmp-release-centos.repo
[root@www ~]#
如果要卸载rpm
## 查询
[root@www ~]# rpm -qa|grep mysql
mysql80-community-release-el8-1.noarch
## 卸载
[root@www ~]# rpm -e mysql80-community-release
启动指定的mysql版本:
## 因为我这里本来下载的源就是mysql8的,所以这一步可以省略。
[root@www ~]# dnf config-manager --enable mysql80-community
## 启动后,在这个文件中的 mysql80-community enabled=1,,表示启动这个版本作为默认
[root@www ~]# cat /etc/yum.repos.d/mysql-community.repo
[mysql80-community]
name=MySQL 8.0 Community Server
baseurl=http://repo.mysql.com/yum/mysql-8.0-community/el/8/$basearch/
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-mysql
禁用系统默认版本
[root@www ~]# dnf module disable mysql
安装Mysql
## 查询yum源中的所有mysql,如下,会显示很多mysql版本
[root@www ~]# dnf --showduplicates list|grep mysql-community-server
mysql-community-server.x86_64 8.0.17-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.18-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.19-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.20-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.21-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.22-1.el8 mysql80-community
mysql-community-server.x86_64 8.0.23-1.el8 mysql80-community
[root@www ~]#
## 格式为 dnf instll mysql-community-server版本 ,如果直接执行 dnf instll mysql-community-server -y,会下载最新的版本
[root@www ~]# dnf install mysql-community-server-8.0.22 -y
配置Mysql参数
- 在
/etc/my.conf
添加 如下
[root@www etc]# vim /etc/my.cnf
## 指定配置从哪个目录加载
!includedir /etc/my.cnf.d/
- 创建
mysql.conf
配置
[root@www etc]# vim /etc/my.cnf.d/mysql.cnf
[mysqld]
#忽略表名大小写
lower_case_table_names=1
#允许最大连接数,默认为 151
max_connections=500
#允许连接失败的次数,可以防止有人从该主机试图攻击数据库系统,默认值为100
max_connect_errors=10
################################ InnoDB ########################################
# 创建新表时将使用的默认存储引擎
default-storage-engine=INNODB
innodb_buffer_pool_size=2G
#innodb_additional_pool_size=20M
innodb_log_file_size=256M
innodb_log_buffer_size=12M
innodb_flush_log_at_trx_commit=2
#innodb_flush_method
#thread_cache=8
#innodb_autoextend_increment=128M
#这里确认是否起用压缩存储功能
innodb_file_per_table=1
#innodb_file_format=barracuda #mysql 8 不支持该功能
#决定压缩程度的参数,如果你设置比较大,那么压缩比较多,耗费的CPU资源也较多;
#相反,如果设置较小的值,那么CPU占用少。默认值6,可以设置0-9#
innodb_compression_level=6
#指定在每个压缩页面可以作为空闲空间的最大比例,
#该参数仅仅应用在设置了innodb_compression_failure_threshold_pct不为零情况下,并且压缩失败率通过了中断点。
#默认值50,可以设置范围是0到75
innodb_compression_pad_pct_max=50
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
# 字符集设置
character-set-server=utf8mb4
collation-server=utf8mb4_0900_ai_ci
# 配置 init_connect 需要配置 super 权限,否则普通用户连接时会报错: Lost connection to MySQL server during query
# init_connect=’SET NAMES utf8mb4'
# ## 忽略客户端使用的字符集,使用服务端的字符集
character-set-client-handshake=OFF
[mysql]
default-character-set=utf8mb4
[client]
default-character-set=utf8mb4
启动 Mysql
## 启动
[root@www ~]# systemctl start mysqld.service
## 查看mysql服务状态
[root@www ~]# systemctl status mysqld.service
## 添加开机启动
[root@www ~]# systemctl enable mysqld.service
查看 Mysql 进程:
如下所示,Mysql服务已启动成功,并监听3306端口
[root@www ~]# ps -ef|grep mysql
mysql 34011 1 3 13:59 ? 00:00:05 /usr/sbin/mysqld
root 34125 5808 0 14:02 pts/0 00:00:00 grep --color=auto mysql
[root@www ~]# netstat -anpl|grep 3306
tcp6 0 0 :::33060 :::* LISTEN 34011/mysqld
tcp6 0 0 :::3306 :::* LISTEN 34011/mysqld
[root@www ~]#
Mysql默认安装目录
- 配置文件:
/etc/my.conf
- 数据目录:
/var/lib/mysql
- 日志文件:
/var/log/mysqld.log
Mysql默认密码
## 查看日志文件,有个generated for root 的日志最后就是密码,如这里的密码就是 w=HweHqG*0)O
[root@www ~]# cat /var/log/mysqld.log
2021-04-10T05:59:43.377330Z 0 [System] [MY-013169] [Server] /usr/sbin/mysqld (mysqld 8.0.22) initializing of server in progress as process 33966
2021-04-10T05:59:43.382242Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2021-04-10T05:59:43.573803Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2021-04-10T05:59:44.303221Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: w=HweHqG*0)O
登陆Mysql、密码组件安装卸载
## 输入日志文件中的默认密码登陆
[root@www ~]# mysql -uroot -p
Enter password:
初次登陆后,需要强制修改密码,密码需要一定的格式,格式规则可通过 SHOW VARIABLES LIKE '%validate_password%'
查看,如果你觉得修改 validate_password.xxx
的参数太多,比较麻烦,可以直接卸载 myql 密码验证的 component。
mysql> alter user 'root'@'localhost' IDENTIFIED BY 'Root@1234';
Query OK, 0 rows affected (0.01 sec)
mysql> select version();
+-----------+
| version() |
+-----------+
| 8.0.22 |
+-----------+
1 row in set (0.00 sec)
-- 查看密码设置的规则
-- validate_password.length: 密码长度,最小值4,默认值为8
-- validate_password.mixed_case_count 大小写的最小个数
-- validate_password.number_count 密码中数字的最小个数
-- validate_password.policy 密码验证策略: 0-->LOW 1-->MEDIUM 2-->strong
-- validate_password.special_char_count 特殊字符的最小个数
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.00 sec)
-- 如果要修改密码验证的参数,需要这样一个个设置
-- mysql> set global validate_password.length=4;
-- mysql> set global validate_password.policy=LOW;
-- mysql> set global validate_password.number_count=0;
-- mysql> set global validate_password.special_char_count=0;
-- 如果你觉得上面一个个设置参数太麻烦,可以直接卸载MySql密码验证的 component
-- 查看component
mysql> SELECT * FROM mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn |
+--------------+--------------------+------------------------------------+
| 1 | 1 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.00 sec)
-- 卸载组件,卸载之后, validate_password.xxx 的这些参数将不存在,且可任意设置Mysql的密码
mysql> UNINSTALL COMPONENT 'file://component_validate_password';
Query OK, 0 rows affected (0.01 sec)
-- 卸载validate_password组件后,设置mysql密码将不验证,可任意配置
mysql> alter user 'root'@'localhost' IDENTIFIED BY 'root';
Query OK, 0 rows affected (0.00 sec)
-- 如果你想安装组件,执行install命令
mysql> INSTALL COMPONENT 'file://component_validate_password';
Query OK, 0 rows affected (0.00 sec)
-- 再次查看,组件又回来了,同时,上面的 validate_password.xxx 的这些参数也会存在。
mysql> SELECT * FROM mysql.component;
+--------------+--------------------+------------------------------------+
| component_id | component_group_id | component_urn |
+--------------+--------------------+------------------------------------+
| 2 | 2 | file://component_validate_password |
+--------------+--------------------+------------------------------------+
1 row in set (0.00 sec)
mysql>
修改mysql远程访问权限
默认情况下,Mysql只能在本机访问,如果需要远程连接,操作如下:
mysql> use mysql;
Reading table information for completion of table and column names
You can turn off this feature to get a quicker startup with -A
Database changed
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
| root | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
-- 使用 update会更新已存在的用户,也可以使用 grant 语句。
-- GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'password' WITH GRANT OPTION;
mysql> update user set host='%' where user='root';
Query OK, 1 row affected (0.00 sec)
Rows matched: 1 Changed: 1 Warnings: 0
-- 刷新权限
mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)
-- 再次查询,如下 ,root 用户的host 为%了,此时可以所有客户端可以连接mysql。
mysql> select user,host from user;
+------------------+-----------+
| user | host |
+------------------+-----------+
| root | % |
| mysql.infoschema | localhost |
| mysql.session | localhost |
| mysql.sys | localhost |
+------------------+-----------+
4 rows in set (0.00 sec)
mysql>
卸载Mysql
## 先停止mysql启动服务
[root@www ~]# systemctl disable mysqld.service
## 删除 mysql
[root@www ~]# dnf remove mysql-community-server
## 删除mysql数据目录
[root@www ~]# rm -rf /var/lib/mysql
[root@www ~]# rm -rf /usr/share/mysql
[root@www ~]# rm -rf /usr/lib/mysql
[root@www ~]# rm -rf /var/run/mysql/
[root@www ~]# rm -rf /var/log/mysqld.log