当前位置: 首页 > news >正文

【centos安装mysql数据库】详细版

1、下载二进制文件

如果内网或者断网环境,提前下载好文件
https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
若果公网环境

[root@localhost ~]# cd /root
[root@localhost ~]# wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
[root@localhost ~]# ll mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz
-rw-r--r--. 1 root root 314581668 26 14:37 mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

2、创建mysql用户以及用户组

[root@localhost ~]# groupadd mysql
[root@localhost ~]# useradd mysql -r -g mysql
# 验证用户组和用户
[root@localhost ~]# id mysql
uid=498(mysql) gid=501(mysql)=501(mysql)

3、创建程序、数据存放目录

[root@localhost ~]# mkdir /home/mysql/{program,data,conf} -p
[root@localhost~]#mkdir/home/mysql/data/mysqldata1/{mydata,sock,tmpdir,log,innodb_ts,innodb_log,undo,slowlog, binlog,relaylog} -p
# 查看创建目录结果
[root@localhost ~]# tree /home/mysql/  #如果没有这个命令,就使用yum install tree -y 安装
/home/mysql/
├—— conf
├—— data
|   └—— mysqldata1
|       ├—— binlog
|       ├—— innodb_log
|       ├—— innodb_ts
|       ├—— log
|       ├—— mydata
|       ├—— slowlog
|       ├—— sock
|       ├—— tmpdir
|       └—— undo
|       └—— relaylog
└—— program
13 directories, 0 files

4、解压缩二进制文件并设置目录权限

[root@localhost ~]# cd /root
[root@localhost ~]# tar xf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz -C/home/mysql/\program/
[root@localhost ~]# chown mysql.mysql /home/mysql -R
# 查看datadir关键目录的权限是否正确
[root@localhost ~]# ll /home/mysql/data/mysqldata1/
总用量 36
drwxr-xr-x 2 mysql mysql 4096 212 23:07 binlog
drwxr-xr-x 2 mysql mysql 4096 212 23:07 innodb_log
drwxr-xr-x 2 mysql mysql 4096 212 23:07 innodb_ts
drwxr-xr-x 2 mysql mysql 4096 212 23:07 log
drwxr-xr-x 2 mysql mysql 4096 212 23:07 mydata
drwxr-xr-x 2 mysql mysql 4096 212 23:07 slowlog
drwxr-xr-x 2 mysql mysql 4096 212 23:07 sock
drwxr-xr-x 2 mysql mysql 4096 212 23:07 tmpdir
drwxr-xr-x 2 mysql mysql 4096 212 23:07 undo
drwxr-xr-x 2 mysql mysql 4096 212 23:07 relaylog

5、软链路径

[root@localhost ~]# ln -s\
/home/mysql/program/mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql
# 查看basedir关键程序目录是否可用
[root@localhost ~]# ll /usr/local/mysql/
总用量 68
drwxr-xr-x  2 mysql mysql  4096 212 23:05 bin
-rw-r--r--  1 mysql mysql 17987 1128 21:36 COPYING
drwxr-xr-x  3 mysql mysql  4096 212 23:04 data
drwxr-xr-x  2 mysql mysql  4096 212 23:05 docs
drwxr-xr-x  3 mysql mysql  4096 212 23:05 include
drwxr-xr-x  3 mysql mysql  4096 212 23:04 lib
drwxr-xr-x  4 mysql mysql  4096 212 23:05 man
drwxr-xr-x 10 mysql mysql  4096 212 23:05 mysql-test
-rw-r--r--  1 mysql mysql  2496 1128 21:36 README
drwxr-xr-x  2 mysql mysql  4096 212 23:04 scripts
drwxr-xr-x 28 mysql mysql  4096 212 23:04 share
drwxr-xr-x  4 mysql mysql  4096 212 23:05 sql-bench
drwxr-xr-x  2 mysql mysql  4096 212 23:04 support-files
[root@localhost ~]# export PATH=$PATH:/usr/local/mysql/bin/
[root@localhost ~]# echo 'export PATH=$PATH:/usr/local/mysql/bin/' >> /etc/profile
# 查看环境变量配置是否成功添加到/etc/profile文件中
[root@localhost ~]# tail -1 /etc/profile
export PATH=$PATH:/usr/local/mysql/bin/

6、配置my.cnf 配置文件

[root@localhost ~]# cp -ar /usr/local/mysql/support-files/my-default.cnf /home/mysql/conf/my.cnf
[root@localhost ~]# ln -s /home/mysql/conf/my.cnf  /etc/my.cnf
# my.cnf配置文件内容如下
[root@localhost ~]# vim /home/mysql/conf/my.cnf
[client]
socket=/home/mysql/data/mysqldata1/sock/mysql.sock # sock文件所在路径
[mysqld]
user=mysql
basedir = /usr/local/mysql
socket=/home/mysql/data/mysqldata1/sock/mysql.sock # sock文件所在路径
pid-file=/home/mysql/data/mysqldata1/sock/mysql.pid # pid文件所在路径
datadir=/home/mysql/data/mysqldata1/mydata # 数据文件路径
tmpdir=/home/mysql/data/mysqldata1/tmpdir # 存放临时文件的路径
log-error=/home/mysql/data/mysqldata1/log/error.log
slow_query_log
slow_query_log_file=/home/mysql/data/mysqldata1/slowlog/slow-query.log
log-bin=/home/mysql/data/mysqldata1/binlog/mysql-bin
relay-log=/home/mysql/data/mysqldata1/relaylog/mysql-relay-bin
innodb_data_home_dir = /home/mysql/data/mysqldata1/innodb_ts
innodb_log_group_home_dir = /home/mysql/data/mysqldata1/innodb_log
innodb_undo_directory = /home/mysql/data/mysqldata1/undo/

7、初始化MySQL(二选其一)

# 使用该选项初始化时会在错误日志中写一个随机的root密码,初始化完成之后在错误日志中搜索password
[root@localhost mysql]# mysqld --defaults-file=/etc/my.cnf --initialize
#使用该选项初始化时不会产生随机密码,而是像MySQL 5.7之前的版本一样,初始化完成之后,第一次登录数据库使用空的root密码
[root@localhost mysql]# mysqld --defaults-file=/etc/my.cnf --initialize-insecure

8、启动MySQL

[root@localhost mysql]# cp -ar /usr/local/mysql/support-files/mysql.server /etc/init.d/\mysqld
[root@localhost mysql]# chmod +x /etc/init.d/mysqld
# 查看/etc/init.d/mysqld是否被成功赋予执行权限
[root@localhost mysql]# ll /etc/init.d/mysqld
-rwxr-xr-x 1 mysql mysql 10875 1128 23:32 /etc/init.d/mysqld
[root@localhost mysql]# service mysqld start
Starting MySQL..                                         [确定]
# 查看进程和端口
[root@localhost mysql]# ps aux |grep mysqld
root     10475  0.0  0.0  11472  1384 pts/2    S    23:37   0:00 /bin/sh /usr/local/mysql/bin/mysqld_safe --datadir=/home/mysql/data/mysqldata1/mydata --pid-file=/home/mysql/data/mysqldata1/sock/mysql.pid
mysql   10743  0.0 24.21078428464964 pts/2  Sl  23:37  0:00 /usr/local/mysql/bin/mysqld--basedir=/usr/local/mysql --datadir=/home/ mysql/ data/mysqldata1/mydata --plugin-dir=/usr/local/mysql/lib/plugin --user=mysql --log-error=/home/mysql/data/mysqldata1/log/error.log --pid-file=/home/mysql/data/mysqldata1/sock/mysql.pid
--socket=/home/mysql/data/mysqldata1/sock/mysql.sock
root     10791  0.0  0.0103256   860 pts/2    S+   23:46   0:00 grep mysqld
[root@localhost mysql]# netstat -ntupl |grep mysqld
tcp        0      0 :::3306              :::*               LISTEN      10743/mysqld
# 查看错误日志 日志这儿文件名可能不同需要看的在目录下看一下文件名
[root@localhost mysql]# vim /home/mysql/data/mysqldata1/log/error.log
# 注意:日志中不能出现ERROR错误,看到最后一行输出版本号和socket信息就表示MySQL启动成功
Version:  '5.6.35-log'   socket:  '/home/mysql/data/mysqldata1/sock/mysql.  sock'   port:3306  MySQL Community Server(GPL)

9、简单加固

9.1、登录数据库
[root@localhost mysql]# mysql
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 1
Server version: 5.6.35-log MySQL Community Server(GPL)
Copyright(c)2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help; ' or '\h' for help. Type '\c' to clear the current input statement.
# 查看当前登录用户
mysql> select user();
+----------------+
| user()        |
+----------------+
| root@localhost |
+----------------+
1 row in set(0.00 sec)
# 查看当前MySQL版本是否正确
mysql> select version();
+------------+
| version() |
+------------+
| 5.6.35-log |
+------------+
1 row in set(0.00 sec)
9.2、删除非root或非localhost的用户并修改root密码
mysql> select user, host from mysql.user;
+------+------------------------+
| user | host                   |
+------+------------------------+
| root | 127.0.0.1              |
| root | ::1                    |
|      | localhost              |
| root | localhost              |
|      | localhost.localdomain  |
| root | localhost.localdomain  |
+------+------------------------+
6 rows in set(0.00 sec)
mysql> delete from mysql.user where user! ='root' or host! ='localhost';
Query OK, 5 rows affected(0.01 sec)
## 如果是MySQL 5.7.x 较新的版本或者8.0.x版本,则删除操作需要排除几个系统用户
mysql>DELETE FROM mysql.user WHERE user NOT IN('mysql.sys', 'mysql.session', 'mysqlxsys', 'root', 'mysql.infoschema')OR host NOT IN('localhost';
# 查看删除结果是否正确
mysql> select user, host from mysql.user;
+------+-----------+
| user | host      |
+------+-----------+
| root | localhost |
+------+-----------+
1 row in set(0.00 sec)
mysql> set password for 'root'@'localhost' = PASSWORD('admin');  # 在 MySQL 5.7.x 版本中可以不需要PASSWORD函数,直接使用明文密码也可以自动转换为加密格式密码写入mysql.user表中,且该用法将在后续版本中移除
Query OK, 0 rows affected(0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected(0.00 sec)
mysql>
# 重新使用新密码登录MySQL
[root@localhost mysql]# mysql -uroot -p
Enter password:
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.6.35-log MySQL Community Server(GPL)
Copyright(c)2000, 2016, Oracle and/or its affiliates. All rights reserved.
Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.
Type 'help; ' or '\h' for help. Type '\c' to clear the current input statement.
mysql>
9.3、删除test库,清理mysql.db表
mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set(0.00 sec)
mysql> drop database test;
Query OK, 0 rows affected(0.00 sec)
# 查看删除结果是否正确
mysql> show databases;
+--------------------+
| Database            |
+--------------------+
| information_schema |
| mysql               |
| performance_schema |
+--------------------+
3 rows in set(0.00 sec)
mysql> select * from mysql.db\G  # MySQL 5.7.x版本移除了test库之后,该库的权限也没有了,但增加了sys库,有对应的sys库的默认权限,所以5.7.x版本忽略清理该表
*************************** 1. row ***************************Host: %Db: testUser:Select_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: NExecute_priv: NEvent_priv: YTrigger_priv: Y
*************************** 2. row ***************************Host: %Db: test\_%User:Select_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: NExecute_priv: NEvent_priv: YTrigger_priv: Y
2 rows in set(0.00 sec)
mysql> truncate mysql.db;
Query OK, 0 rows affected(0.00 sec)
## 如果是MySQL 5.7.x 较新的版本或者8.0.x版本,则清理操作需要排除几个系统用户
mysql>DELETE FROM mysql.db where user NOT IN('mysql.sys', 'mysql.session', 'mysqlxsys', 'root', 'mysql.infoschema')OR host NOT IN('localhost';
# 查看清理结果是否正确
mysql> select * from mysql.db\G
Empty set(0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected(0.00 sec)
mysql>

10、删除test库,清理mysql.db表

主要原因:
在默认情况下,MySQL 5.6.x初始化安装之后会生成一个测试用途的test库,这个库在生产环境中一般不需要使用,如果确定不使用,请删除。
在默认情况下,MySQL 5.6.x初始化完成MySQL之后,在mysql.db库级别权限表中会有针对test库的任意用户、任意地址的访问权限,即:无任何权限用户或匿名用户登录到MySQL中都可以对test库进行任意操作。因此,建议MySQL完成初始化安装之后,清理这些不安全的用户或删除mysql.db表中对test库预设的访问权限。

mysql> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set(0.00 sec)
mysql> drop database test;
Query OK, 0 rows affected(0.00 sec)
# 查看删除结果是否正确
mysql> show databases;
+--------------------+
| Database            |
+--------------------+
| information_schema |
| mysql               |
| performance_schema |
+--------------------+
3 rows in set(0.00 sec)
mysql> select * from mysql.db\G  # MySQL 5.7.x版本移除了test库之后,该库的权限也没有了,但增加了sys库,有对应的sys库的默认权限,所以5.7.x版本忽略清理该表
*************************** 1. row ***************************Host: %Db: testUser:Select_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: NExecute_priv: NEvent_priv: YTrigger_priv: Y
*************************** 2. row ***************************Host: %Db: test\_%User:Select_priv: YInsert_priv: YUpdate_priv: YDelete_priv: YCreate_priv: YDrop_priv: YGrant_priv: NReferences_priv: YIndex_priv: YAlter_priv: Y
Create_tmp_table_priv: YLock_tables_priv: YCreate_view_priv: YShow_view_priv: YCreate_routine_priv: YAlter_routine_priv: NExecute_priv: NEvent_priv: YTrigger_priv: Y
2 rows in set(0.00 sec)
mysql> truncate mysql.db;
Query OK, 0 rows affected(0.00 sec)
## 如果是MySQL 5.7.x 较新的版本或者8.0.x版本,则清理操作需要排除几个系统用户
mysql>DELETE FROM mysql.db where user NOT IN('mysql.sys', 'mysql.session', 'mysqlxsys', 'root', 'mysql.infoschema') OR host NOT IN('localhost');
# 查看清理结果是否正确
mysql> select * from mysql.db\G
Empty set(0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected(0.00 sec)
mysql>

精简后的数据库有
在这里插入图片描述


http://www.mrgr.cn/news/90100.html

相关文章:

  • Struts2 命令执行漏洞 S2-045 复现:深入剖析与实战演练
  • zabbix监控nginx指标
  • HarmonyOS开发 - 记事本实例一(界面搭建)
  • Cadence17.4软件的使用--1)配置CIS数据库
  • DeepSeek和ChatGPT的对比
  • 让相机自己决定拍哪儿!——NeRF 三维重建的主动探索之路
  • SQL自学,mysql从入门到精通 --- 第 15天,数据导入、导出
  • QT-常见问题
  • 数据结构-find()-判断字符串s1中是否包含字符串s2
  • VirtualBox中Ubuntu 22.04网卡配置以及解决过程中遇到的问题
  • 【C++学习篇】C++11第二期学习
  • Docker 1. 基础使用
  • vue3 -- 基于el-statistic实现动态数字滚动效果并封装卡片组件
  • jupyterLab插件开发
  • 保姆级教程Docker部署Zookeeper模式的Kafka镜像
  • android 动态库加载机制
  • Itext源代码阅读(2) -- PdfReader
  • 黑马React保姆级(PPT+笔记)
  • FlutterWeb实战:02-加载体验优化
  • Transformer 的辉煌与大模型方向确立,点燃AGI之火把
  • 使用Redis实现业务信息缓存(缓存详解,缓存更新策略,缓存三大问题)-更新中
  • 活动预告 |【Part1】Microsoft Azure 在线技术公开课:基础知识
  • mysql8.0使用pxc实现高可用
  • 使用OBS推流,大华摄像头 srs服务器播放
  • mysql 学习14 索引
  • 【英语】考研、四六级形近词