MySQL简介及安装

什么是数据?
数据(data)是事实或观察的结果,是对客观事物的逻辑归纳,是用于表示客观事物的未经加工的的原始素材。
数据可以是连续的值,比如声音、图像,称为模拟数据。也可以是离散的,如符号、文字,称为数字数据。
在计算机系统中,数据以二进制信息单元0,1的形式表示。

数据的定义: 数据是指对客观事件进行记录并可以鉴别的符号,是对客观事物的性质、状态以及相互关系等进行记载的物理符号或这些物理符号的组合。它是可识别的、抽象的符号。*

1
2
3
4
5
5.6  5.7  版本是市面上用得最多的版本

linux中数据储存在文件系统里面
将代码的数据格式转换为JSON格式:叫序列化
将代码接收到的JSON格式的数据后,转化成自己的代码,叫:反序列化

数据库管理系统类型

  • 关系型数据库 RDBMS

    所有的表都是有二维表组成

    表与表之间有关联

    使用SQL(结构化查询语言)语句来管理

  • 非关系型数据库

    不需要使用SQL语句,没有二维表

关系型数据库和非关系型数据库常见的应用

关系型:MySQL、mariadb、Oracle、PostgreSQL、MMSQL
非关系型:Rdis(键值对)、MongDB(文档型数据库)、elasticsearch(搜索引擎数据库)、memcache(键值对)

InfluxDB/OpenTSDB:Time Series 时序数据库(适合出图,查询时间轴数据方便)
etcd:键值对数据库(配置文件管理中心,所有的web连到他,就可以读取配置)

JAVA程序,有自己的管理中心zookeeper,搭配kafka使用

MySQL安装方式

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
1. rpm、yum安装:安装方便、安装速度快,无法定制
 
2. 二进制:不需要安装,解压即可使用,不能定制功能
 
3. 编译安装
  3.1 可定制,安装慢
  3.2 四个步骤:
    3.2.1 解压(tar)
    3.2.2 生成(./configure)cmake
    3.2.3 编译(make)
    3.2.4 安装(make install)
  3.3  5.5版本之前:tar ./configure make make install
  3.4  5.5版本之后:cmake gmake
 
4. 先编译,然后定制rpm包,制作yum仓库,然后yum安装
  4.1 简单,速度快,可定制,比较复杂,制作时间极长
 

5. 企业中选择的安装方式
  5.1 中小型企业:以上方式都可以,运维偏向编译,dba偏向二进制 运维也偏向二进制
  5.2 大型企业:可以选择: 先编译然后定制rpm包,制作yum仓库,然后yum安装
 
6. docker容器

下载Mysql安装包

https://www.mysql.com/

image-20240807105637146

image-20240807105944871

image-20240807110117554

image-20240807150422738

1
2
3
4
#MYSQL版本选择的潜规则
MYSQL5.6:GA 6-12个月,就是他发布到现在你的具体时间,过了多久,选择在6-12个月内,小版本号为偶数的

MySQL5.7:GA 6-12个月,小版本号为偶数版的,5.7.20以上版本(MGR是MySQL自带的高可用功能)

方式一:源码安装mysql5.6

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
1、#解压
[root@db01 ~]# mkdir /app
[root@db01 ~]# tar xf mysql-5.6.50.tar.gz

2、#源码安装需要cmake命令、依赖
[root@db01 ~]# yum -y install cmake openssl-devel ncurses-devel


3、#生成,需要先加入工作目录
[root@db01 ~]# cd mysql-5.6.50/

cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \
-DMYSQL_DATADIR=/app/mysql-5.6.50/data \
-DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0



#指定编译好的程序存放位置
cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.6.50 \
#数据存放位置
-DMYSQL_DATADIR=/app/mysql-5.6.50/data \
#socket文件存放位置
-DMYSQL_UNIX_ADDR=/app/mysql-5.6.50/tmp/mysql.sock \
#使用utf8字符集
-DDEFAULT_CHARSET=utf8 \
#校验规则
-DDEFAULT_COLLATION=utf8_general_ci \
#使用其他额外的字符集
-DWITH_EXTRA_CHARSETS=all \
#支持的存储引擎
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
#禁用的存储引擎
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
#启用zlib库支持(zib、gzib相关)
-DWITH_ZLIB=bundled \
#启用SSL库支持(安全套接层)
-DWITH_SSL=system \
#启用本地数据导入支持
-DENABLED_LOCAL_INFILE=1 \
#编译嵌入式服务器支持
-DWITH_EMBEDDED_SERVER=1 \
# mysql5.6支持了google的c++mock框架了,允许下载,否则会安装报错。
-DENABLE_DOWNLOADS=1 \
#禁用debug(默认为禁用)
-DWITH_DEBUG=0

如果cmake失败,请将CMakeCache.txt缓存移除
4、#编译、安装
[root@db01 mysql-5.6.50]# make && make insatll

5、创建mysql程序用户
[root@db01 ~]# useradd mysql -s /sbin/nologin -M

6、#修改MySQL的配置文件到只留下[mysqld]标签
[root@db01 ~]# vim /etc/my.cnf
[mysqld]

7、#拷贝启动脚本
[root@db01 ~]# cp /app/mysql-5.6.50/support-files/mysql.server /etc/init.d/mysqld

8、#启动
[root@db01 ~]# /etc/init.d/mysqld start

image-20240807151940351

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
9、#解决办法,安装perl模块,再初始化MYSQL    不要安装perl-devel,这里面是perl的所有模块,这样装的模块太多了,只需要安装autoconf这个模块
[root@db01 ~]# yum -y install autoconf
[root@db01 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data
执行完成之后,找到2个ok,就初始化完成了


10、#再次启动 还是报错
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/app/mysql-5.6.50/data/db01.err'.
240807 23:35:33 mysqld_safe Directory '/app/mysql-5.6.50/tmp' for UNIX socket file don't exists.
ERROR! The server quit without updating PID file (/app/mysql-5.6.50/data/db01.pid).

#报错原因:指定soket文件存放在/app/mysql-5.6.50/tmp,而且存放soket文件的目录没有权限
#解决办法
[root@db01 ~]# mkdir /app/mysql-5.6.50/data/db01.err
[root@db01 ~]# chown -R mysql.mysql /app

11、#再次启动 成功
[root@db01 ~]# /etc/init.d/mysqld start
Starting MySQL... SUCCESS!

12、#添加环境变量
[root@db01 ~]# echo 'export PATH="/app/mysql-5.6.50/bin:$PATH"' > /etc/profile.d/mysql.sh
[root@db01 ~]# source /etc/profile

方法二:二进制安装

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
1、下载二进制包
[root@db02 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz

2、创建app目录,并解压,改名
[root@db02 ~]# mkdir /app
[root@db02 ~]# tar xf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz -C /app
[root@db02 ~]# mv /app/mysql-5.6.50-linux-glibc2.12-x86_64/ /app/mysql-5.6.50


3、创建mysql程序用户
[root@db02 ~]# useradd mysql -s /sbin/nologin -M

4、拷贝MySQL的配置文件到etc下,并把配置文件内的注释清除掉,只留下[mysqld]
[root@db02 ~]# \cp /app/mysql-5.6.50/support-files/my-default.cnf /etc/my.cnf
[root@db02 ~]# vim /etc/my.cnf
[mysqld]


5、拷贝启动脚本
[root@db02 ~]# cp /app/mysql-5.6.50/support-files/mysql.server /etc/init.d/mysqld

6、初始化MYSQL
[root@db02 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data
FATAL ERROR: please install the following Perl modules before executing /app/mysql-5.6.50/scripts/mysql_install_db:
Data::Dumper
#报错,原因缺少per模块
安装perl模块
[root@db02 ~]# yum -y install autoconf

#再次初始化
[root@db02 ~]# /app/mysql-5.6.50/scripts/mysql_install_db --user=mysql --basedir=/app/mysql-5.6.50 --datadir=/app/mysql-5.6.50/data
ok
...
ok
WARNING: Default config file /etc/my.cnf exists on the system
This file will be read by default by the MySQL server
If you do not want to use this, either remove it, or use the
--defaults-file argument to mysqld_safe when starting the server
执行成功

[root@db02 ~]# ll /app/mysql-5.6.50/support-files/
total 32
-rwxr-xr-x 1 7161 31415 1153 Sep 23 2020 binary-configure
-rw-r--r-- 1 7161 31415 773 Sep 23 2020 magic
-rw-r--r-- 1 7161 31415 1126 Sep 23 2020 my-default.cnf#配置文件
-rwxr-xr-x 1 7161 31415 1061 Sep 23 2020 mysqld_multi.server
-rwxr-xr-x 1 7161 31415 894 Sep 23 2020 mysql-log-rotate
-rwxr-xr-x 1 7161 31415 10565 Sep 23 2020 mysql.server#启动脚本

7、启动mysql
#启动报错
[root@db02 ~]# /etc/init.d/mysqld start
/etc/init.d/mysqld: line 244: my_print_defaults: command not found
/etc/init.d/mysqld: line 264: cd: /usr/local/mysql: No such file or directory
Starting MySQL ERROR! Couldn't find MySQL server (/usr/local/mysql/bin/mysqld_safe)
原因:二进制安装的mysql,mysql没有安装在/usr/local/mysql目录下

#解决方法一:修改配置文件 (推荐这个方法,因为在读取的时候优先读取配置文件)
[root@db02 ~]# vim /etc/my.cnf
[mysqld]
basedir=/app/mysql-5.6.50
datadir=/app/mysql-5.6.50/data


#解决方法二:修改脚本
[root@db02 ~]# vim /etc/init.d/mysqld
底行模式输入:
%s#/usr/local/mysql#/app/mysql-5.6.50#g

#再次启动,启动成功
[root@db02 ~]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/app/mysql-5.6.50/data/db02.err'.
.... SUCCESS!

8、登陆mysql
[root@db02 ~]# mysql
-bash: mysql: command not found

#添加环境变量
[root@db02 ~]# echo 'export PATH="/app/mysql-5.6.50/bin:$PATH"' > /etc/profile.d/mysql.sh
[root@db02 ~]# source /etc/profile

9、登陆连接数据库
[root@db02 ~]# mysql
mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| test |
+--------------------+


脚本不能写source /etc/profile ,会不生效

源码安装MYSQL5.7

MySQL5.6与MySQL5.7安装的区别
1、cmake的时候加入了bostorg
2、初始化时 使用mysqld --initialize 替代mysql_install_db,其它参数没有变化:–user= --basedir= --datadir=
3、–initialize会生成一个临时密码

4、还可以用另外一个参数–initialize-insecure

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
1、下载源码包到root目录
#下载CGI的框架 注意这个下载非常非常慢
[root@db03 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-boost-5.7.44.tar.gz

[root@db03 ~]# wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.44.tar.gz

2、安装依赖
[root@db03 mysql-5.7.44]# yum -y install cmake openssl-devel ncurses-devel autoconf

3、创建app目录,并解压,改名
[root@db03 ~]# mkdir /app
[root@db03 ~]# tar xf boost_1_59_0.tar.gz -C /app/
[root@db03 ~]# cd mysql-5.7.44/

#生成 编译安装mysql和boost
[root@db03 ~]# cd /app/mysql-5.7.44/

cmake . -DCMAKE_INSTALL_PREFIX=/app/mysql-5.7.44 \
-DWITH_BOOST=/app/boost_1_59_0/ \
-DMYSQL_DATADIR=/app/mysql-5.7.44/data \
-DMYSQL_UNIX_ADDR=/app/mysql-5.7.44/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=all \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \
-DWITH_ZLIB=bundled \
-DWITH_SSL=system \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLE_DOWNLOADS=1 \
-DWITH_DEBUG=0

#编译安装
[root@db03 mysql-5.7.44]# make && make install

4、创建用户,创建数据库目录
[root@db03 mysql-5.7.44]# useradd mysql -s /sbin/nologin -M

[root@db04 ~]# vim /etc/my.cnf
[mysqld]
basedir=/app/mysql-5.7.44
datadir=/app/mysql-5.7.44/data

[root@db04 ~]# cp /app/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysqld

[root@db04 ~]# cd /app/mysql-5.7.44/

5、#创建data目录,并授予相关权限
root@db04 mysql-5.7.44]# mkdir {mysql-files,data,tmp}
[root@db04 mysql-5.7.44]# chown -R mysql.mysql /app/

6、#初始化数据库 生成一个随机密码
[root@db04 mysql-5.7.44]# /app/mysql-5.7.44/bin/mysqld --initialize --user=mysql --basedir=/app/mysql-5.7.44 --datadir=/app/mysql-5.7.44/data
.....
....
2024-08-07T21:01:19.358769Z 1 [Note] A temporary password is generated for root@localhost: XaD%I7h-&laU

7、启动
[root@db04 mysql-5.7.44]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/app/mysql-5.7.44/data/db04.err'.
.. SUCCESS!

8、#添加环境变量
[root@db03 ~]# echo 'export PATH="/app/mysql-5.7.44/bin:$PATH"' > /etc/profile.d/mysql.sh
[root@db03 ~]# source /etc/profile

9、#登陆使用随机密码登陆
[root@db03 mysql-5.7.44]# mysql -uroot -p'XaD%I7h-&laU'
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

10、#提醒需要重新设置密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

二进制安装MYSQL5.7

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
1、下载二进制包
[root@db04 ~]# wget https://downloads.mysql.com/archives/get/p/23/file/mysql-5.7.44-linux-glibc2.12-x86_64.tar
解压出来有2个包,删除带test的包

2、创建/app,并把解压后的文件放到/app目录
[root@db04 ~]# mkdir /app
[root@db04 ~]# tar xf mysql-5.7.44-linux-glibc2.12-x86_64.tar.gz -C /app/

[root@db04 ~]# mv /app/mysql-5.7.44-linux-glibc2.12-x86_64/ /app/mysql-5.7.44

3、#在生产环境中,一定要在运行的数据库,拷贝其他数据库的配置文件
[root@db04 ~]# useradd mysql -s /sbin/nologin -M
[root@db04 mysql-5.7.44]# vim /etc/my.cnf
[mysqld]
basedir=/app/mysql-5.7.44
datadir=/app/mysql-5.7.44/data

[root@db04 ~]# cp /app/mysql-5.7.44/support-files/mysql.server /etc/init.d/mysqld

[root@db04 ~]# cd /app/mysql-5.7.44/

4、#创建data目录,并授予相关权限
root@db04 mysql-5.7.44]# mkdir {mysql-files,data}
[root@db04 mysql-5.7.44]# chown -R mysql.mysql /app/


5、#初始化数据库 生成一个随机密码
[root@db04 mysql-5.7.44]# /app/mysql-5.7.44/bin/mysqld --initialize --user=mysql --basedir=/app/mysql-5.7.44 --datadir=/app/mysql-5.7.44/data
2024-08-07T17:43:11.896232Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2024-08-07T17:43:18.143399Z 0 [Warning] InnoDB: New log files created, LSN=45790
2024-08-07T17:43:19.266013Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2024-08-07T17:43:19.354535Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 88a4a42a-54e4-11ef-8129-000c2961c317.
2024-08-07T17:43:19.358779Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2024-08-07T17:43:20.532115Z 0 [Warning] A deprecated TLS version TLSv1 is enabled. Please use TLSv1.2 or higher.
2024-08-07T17:43:20.532142Z 0 [Warning] A deprecated TLS version TLSv1.1 is enabled. Please use TLSv1.2 or higher.
2024-08-07T17:43:20.540163Z 0 [Warning] CA certificate ca.pem is self signed.
2024-08-07T17:43:20.824069Z 1 [Note] A temporary password is generated for root@localhost: ?-h9g5kg9g%K #随机密码


如果数据库崩溃了,需要重新初始化,就要rm -rf /data 然后再初始化

6、#启动
[root@db04 mysql-5.7.44]# /etc/init.d/mysqld start
Starting MySQL.Logging to '/app/mysql-5.7.44/data/db04.err'.
.. SUCCESS!

7、#添加环境变量
[root@db03 ~]# echo 'export PATH="/app/mysql-5.7.44/bin:$PATH"' > /etc/profile.d/mysql.sh
[root@db03 ~]# source /etc/profile

8、#登陆使用随机密码登陆
[root@db04 mysql-5.7.44]# mysql -uroot -p'?-h9g5kg9g%K'
mysql> show databases;
ERROR 1820 (HY000): You must reset your password using ALTER USER statement before executing this statement.

9、#提醒需要重新设置密码
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '123';
Query OK, 0 rows affected (0.01 sec)

mysql> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+

使用systemd管理数据库

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1、查看mysql的源生启动命令
[root@db02 ~]# ps -ef |grep mysql
root 9719 1 0 Aug08 pts/0 00:00:00 /bin/sh /app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db01.pid

#就是这个命令
/app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db01.pid

2、#拷贝sshd的启动脚本,并改成mysql的
[root@db02 ~]# cp /usr/lib/systemd/system/{sshd,mysqld}.service
[root@db02 ~]# ll /usr/lib/systemd/system/mysqld.service
-rw-r--r-- 1 root root 373 Aug 8 18:35 /usr/lib/systemd/system/mysqld.service

3、编辑启动文件
[root@db02 ~]# vim /usr/lib/systemd/system/mysqld.service
[Unit] #这个标签的信息不重要
Description=mysql server
Documentation=man:sshd(8) man:sshd_config(5)
After=network.target sshd-keygen.service
Wants=sshd-keygen.service

[Service]
#就修改这行,添加了启动脚本
ExecStart=/app/mysql-5.6.50/bin/mysqld_safe --datadir=/app/mysql-5.6.50/data --pid-file=/app/mysql-5.6.50/data/db02.pid
ExecReload=/bin/kill -HUP $MAINPID
#KillMode=process #我如果打开这行,就不能停止服务,我注释掉就可以停止服务了,如果打开这行可以停止服务,就没必要注释掉
KillMode=killall mysqld
Restart=on-failure
RestartSec=42s

[Install]
WantedBy=multi-user.target