一、数据库概述

1. 什么是数据库

数据库是按照数据结构来组织、存储和管理数据的仓库。是一个长期存储在计算机内的,有组织、可共享的、统一管理的大量数据的集合

2. 数据库的分类

RDBMS(关系型数据库)

Oracle、MySQL、Microsoft SQL Server(简称"MSSQL")、PostgreSQL(简称"PGSQL")

NOSQL(非关系型数据库)

MongoDB、ElasticSearch、Redis、Hbase

主流数据库的排行榜:

https://db-engines.com/en/ranking

3. 版本选择

建议选择MySQl 5.7和MySQL 8.0的最新版本进行下载 下载地址: https://downloads.mysql.com/archives/community/

二、部署MySQL数据库

下面以Mysql5.6举例

1. 创建MySQL相关目录

mkdir -pv /dadong/{softwares,data,logs}/mysql
# mkdir: 已创建目录 "/dadong"
# mkdir: 已创建目录 "/dadong/softwares"
# mkdir: 已创建目录 "/dadong/softwares/mysql"
# mkdir: 已创建目录 "/dadong/data"
# mkdir: 已创建目录 "/dadong/data/mysql"
# mkdir: 已创建目录 "/dadong/logs"
# mkdir: 已创建目录 "/dadong/logs/mysql"

创建的目录说明:
"/dadong/softwares/mysql": 存放MySQL应用程序。
"/dadong/data/mysql": 存放MySQL数据。
"/dadong/logs/mysql": 存放MySQL日志

2. 创建MySQL服务账户

 # 创建一个mysql系统用户
useradd -r -s /sbin/nologin -d /dadong/data/mysql -c 'MySQL DataBase Server User' mysql

# 创建目录时同时指定属主和属组
install -d /dadong/data/mysql -o mysql -g mysql

# 查看目录权限是否已修改
ll -d /dadong/data/mysql/
# drwxr-xr-x 2 mysql mysql 6 9月   7 08:23 /dadong/data/mysql/

3.上传MySQL应用

# 上传 mysql 到 /dadong/softwares/mysql 目录下
# 解压 mysql
tar -zxvf mysql-5.6.51-linux-glibc2.12-x86_64.tar.gz

# 创建符号链接
ln -s mysql-5.6.51-linux-glibc2.12-x86_64 mysql

4.设置环境变量

vim /etc/profile.d/mysql.sh
export PATH=/dadong/softwares/mysql/mysql/bin:$PATH

# 启用
source /etc/profile.d/mysql.sh

# 查看环境变量是否生效
mysql -V
# mysql  Ver 14.14 Distrib 5.7.31, for linux-glibc2.12 (x86_64) using  EditLine wrapper

5.修改遗留的MySQL分支

# 查看系统是否包含 mariadb
rpm -qa | grep mariadb
# mariadb-libs-5.5.68-1.el7.x86_64

# 卸载 mariadb-libs
yum -y remove mariadb-libs

# 清空配置文件
rm -rf /etc/my.cnf*

三、初始化数据库

1.生成数据库初始数据

# mysql初始化脚本
/dadong/softwares/mysql/mysql56/scripts/mysql_install_db --user=mysql --basedir=/dadong/softwares/mysql/mysql --datadir=/dadong/data/mysql

# 查看数据目录变化
ll /dadong/data/mysql
# 总用量 110600
# -rw-rw---- 1 mysql mysql 12582912 9月   7 08:58 ibdata1
# -rw-rw---- 1 mysql mysql 50331648 9月   7 08:58 ib_logfile0
# -rw-rw---- 1 mysql mysql 50331648 9月   7 08:58 ib_logfile1
# drwx------ 2 mysql mysql     4096 9月   7 08:58 mysql
# drwx------ 2 mysql mysql     4096 9月   7 08:58 performance_schema
# drwx------ 2 mysql mysql        6 9月   7 08:58 test

2.设置配置文件

vim /etc/my.cnf

[mysqld]
user=mysql
basedir=/dadong/softwares/mysql/mysql
datadir=/dadong/data/mysql
socket=/tmp/mysql.sock

[mysql]
socket=/tmp/mysql.sock

# 创建mysql.err文件,如果不创建在启动数据库中会报错
touch /dadong/logs/mysql/mysql.err

# 修改文件的属主和属组
chown mysql:mysql /dadong/logs/mysql/mysql.err

3.设置MySQL启动脚本

# 将MySQL内置的启动脚本拷贝到系统的脚本管理目录
cp /dadong/softwares/mysql/mysql/support-files /etc/init.d/mysqld

# 修改 /etc/init.d/mysqld 文件的basedir,datadir
vim /etc/init.d/mysqld

basedir=/dadong/softwares/mysql/mysql
datadir=/dadong/data/mysql

# 重新加载配置
systemctl daemon-reload

# 设置开机自启动脚本
chkconfig --add mysqld

4.测试MySQL是否可以正常连接

# 默认情况下是没有密码的
mysql

Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.6.51 MySQL Community Server (GPL)

Copyright (c) 2000, 2021, 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> show databases;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| mysql              |
| performance_schema |
| test               |
+--------------------+
4 rows in set (0.00 sec)

5.设置管理员密码

# 设置密码为"dadong"
mysqladmin -uroot -p password dadong
#  # 这里让我们输入之前的旧密码,我们之前的旧密码为空,因此无需输入,直接回车即可!
Enter password: 
mysqladmin: [Warning] Using a password on the command line interface can be insecure.

# 使用刚才设置的密码进行登录
mysql -uroot -pdadong

6.不同版本数据库初始方法

# MySQL 5.6版本初始化方式如下所示:(mysql_install_db脚本在MySQL安装目录的scripts目录下)
mysql_install_db --user=mysql --basedir=/dadong/softwares/mysql/mysql --datadir=/dadong/data/mysql

# MySQL 5.7+版本(包括MySQL 8.0+版本)均可以采用以下两种的方式进行初始化:
# 生成密码为空的管理员用户:
mysqld --initialize-insecure --user=mysql --basedir=/dadong/softwares/mysql/mysql --datadir=/dadong/data/mysql
# 生成一个12位的4种密码复杂度的临时管理用户,第一次登录时需要修改这个密码:
mysqld --initialize --user=mysql --basedir=/dadong/softwares/mysql/mysql --datadir=/dadong/data/mysql

# 重置密码:
alter user user() identified by "123";

常见报错

ERROR: please install the following Perl modules before executing /dadong/softwares/mysql/mysql56/scripts/mysql_install_db:

故障原因: 
缺少Perl模块。
    
解决方案:
安装autoconf即可,CentOS执行"yum -y install autoconf"。

mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

报错信息:
  mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory

报错原因分析:
  缺少libaio.so依赖库

解决方案:
  安装libaio.so对应的依赖库即可,以CentOS 7.9.2009为例,解决方案为: "yum -y install libaio"

[ERROR] --initialize specified but the data directory has files in it. Aborting.

报错信息:
  2021-01-07T15:16:53.297807Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.

报错原因分析:
  初始化数据时,数据目录不为空,从而导致的报错。这种情况多发生于指定的"--datadir"目录不为空,或者多次执行了"mysqld --initialize-insecure --datadir=..."相关的指令。
        
解决方案:
  这种情况下,要么停止初始化数据库(因为你可能这是一个误操作),要么使用rm命令将"--datadir"指向的目录中文件全部删除,请根据实际情况做出选择。

Starting MySQL.2021-01-07T15:36:07.097608Z mysqld_safe error: log-error set to '/dadong/logs/mysql/mysql.log', however file don't exists. Create writable for user 'mysql'

报错信息:
  Starting MySQL.2021-01-07T15:36:07.097608Z mysqld_safe error: log-error set to '/dadong/logs/mysql/mysql.log', however file don't exists. Create writable for user 'mysql'.

报错原因分析:
  报错已经很明显了,说是我们使用了log-error关键字定义了'/dadong/logs/mysql/mysql.log',但启动程序时发现该文件不存在!

解决方案:
  既然找到原因了,那就参考我上面的方式,使用touch命令创建出'/dadong/logs/mysql/mysql.log'文件,别忘记最后要修改权限,因为运行用户是mysql。

ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock'

报错信息:
  ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

报错原因分析:
  说是没有办法通过'/tmp/mysql.sock'套接字来连接到MySQL服务。这种情况下常见的原因有两种: 一种是有人恶意删除了该套接字文件,另外一种是MySQL Server服务压根没有启动!

解决方案:
依次做如下检查:
  (1)'/tmp/mysql.sock'文件是否存在;
  (2)检查MySQL Server服务是否启动成功;
  (3)查看"my.cnf"配置文件,是否mysqld字段和mysql字段配置的套接字路径不一致;

ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement

故障原因:
  启动时使用了"--initialize"参数,因此会强制要求修改密码。临时密码并不安全。
    
解决方案:
  alter user user() identified by "123";

mysqld[23966]: /etc/rc.d/init.d/mysqld: line 259: cd: /dadong/softwares/mysql/mysql: No such file or directory

故障原因:
  my.cnf配置文件写错了。
    
解决方案:
  如果启动脚本中有指定datadir或者basedir,可以不配置my.cnf,如果配置my.cnf则其优先级较高,而脚本的配置不会生效。