一、数据库概述
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则其优先级较高,而脚本的配置不会生效。