上一篇,提到了我为什么要写 MySQL 系列教程的起因。这一篇,咱们就来开始 MySQL 系列学习的第一篇,MySQL 的装置。MySQL 的装置有很多中形式,本文重点实际在 Centos 操作系统上实现源码的装置。这里也总结一下,我集体晓得的一些装置形式。
1、如果是在 Mac 操作系统,你能够间接到官方网站下载 .dmg
格局的安装包进行装置,也能够应用包治理命令 (port、brew) 进行装置。同时也你能够应用 docker 进行装置。
2、如果你是 Windows,你能够间接到官方网站下载 .msi
格局的安装包进行装置,也能够应用一些集成环境,例如 PHPStudy。同时你也能够应用 docker 进行装置。
3、如果你是 Linux,你能够应用包管理工具 (yum) 装置,或者应用 .rpm
包装置,同时你也能够应用二进制文件装置,或者应用 docker 进行装置。
不同的装置形式,优缺点其实也有所不同。
1、例如你用包治理命令装置,这种形式非常简单,包管理工具个别会主动帮你解决依赖问题,不须要手动的解决这些问题。同时卸载也比拟不便。
2、如果你是 Linux 装置,采纳的 .rpm
格局,这种略微麻烦一些,须要你手动的解决包依赖,同时你卸载也比拟繁琐,你要手动的去卸载一些依赖包。也不举荐应用这种形式。
3、因为 docker、k8s 的宽泛应用,当初风行的装置形式,应该是这种了。间接写好 .dockerfile
文件,能够实现跨平台的装置。
4、本章次要是学习 MySQL 的装置,因而咱们采纳二进制的形式进行装置,相熟整个装置流程。
本系列教程采纳的是 MySQL8.0 的版本。这一点可能须要大家留神一下。
对于 MySQL8.0 的装置,本文演示两种装置形式,一种是二进制形式装置,另外一种是采纳 docker 装置。
Linux 装置
Linux 我采纳的是 centos7 的版本,本地搭建的一个虚拟机。你须要依据本人的状况,去搭建这样的一套学习环境,这里就演示装置虚拟机的过程了。如果遇到什么问题,你也能够独自找我,帮助解决。我下载的 centos7,内置了 MariaDB,因而咱们实现须要把 MariaDB 卸载了。
卸载 mariadb
你能够应用如下的命令,查看本地是否装置了 MariaDB。如果没有显示上面的文件,示意没有装置,省略掉上面的卸载命令即可。
# 查看 MariaDB 是否装置
[root@192 yum.repos.d]# rpm -qa|grep mariadb
mariadb-libs-5.5.68-1.el7.x86_64
# 卸载 MariaDB
[root@192 yum.repos.d]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64
# 检测卸载后果,输入的内容是空则示意卸载胜利
[root@192 yum.repos.d]# rpm -qa|grep mariadb
下载二进制文件
要下载二进制文件,能够间接到 MySQL 官网进行下载,具体的地址是。在界面上依据下图的示例,进行下载即可。
你也能够应用上面的链接进行下载,这也是我本地应用的链接地址。
cd ~ && wget https://cdn.mysql.com//Downloads/MySQL-8.0/mysql-8.0.30-el7-x86_64.tar
下载好之后,把该文件复制到 /usr/local
目录上面,而后对其解压。
# cp mysql-8.0.30-el7-x86_64.tar /usr/local
# 解压
tar -xvf mysql-8.0.30-el7-x86_64.tar
# 查看解压文件
-rw-r--r--. 1 7161 31415 492490461 7 月 7 2022 mysql-8.0.30-el7-x86_64.tar.gz
-rw-r--r--. 1 7161 31415 22006040 7 月 7 2022 mysql-router-8.0.30-el7-x86_64.tar.gz
-rw-r--r--. 1 7161 31415 305543348 7 月 7 2022 mysql-test-8.0.30-el7-x86_64.tar.gz
通过解压,咱们会失去下面的 3 个压缩包,重点咱们关注 mysql-8.0.30-el7-x86_64.tar.gz
这个文件即可,其余的两个,咱们暂且不论。
解压好之后,咱们再对 mysql-8.0.30-el7-x86_64.tar.gz
文件进行解压。
# 解压
tar -xvf mysql-8.0.30-el7-x86_64.tar.gz
# 对文件夹进行重命名
mv mysql-8.0.30-el7-x86_64 mysql
# 查看文件目录
cd mysql && ll
drwxr-xr-x. 2 7161 31415 4096 7 月 7 2022 bin
drwxr-xr-x. 2 7161 31415 55 7 月 7 2022 docs
drwxr-xr-x. 3 7161 31415 4096 7 月 7 2022 include
drwxr-xr-x. 6 7161 31415 201 7 月 7 2022 lib
-rw-r--r--. 1 7161 31415 287624 7 月 7 2022 LICENSE
drwxr-xr-x. 4 7161 31415 30 7 月 7 2022 man
-rw-r--r--. 1 7161 31415 666 7 月 7 2022 README
drwxr-xr-x. 28 7161 31415 4096 7 月 7 2022 share
drwxr-xr-x. 2 7161 31415 77 7 月 7 2022 support-files
# 创立数据目录(肯定留神 data 目录是放在 mysql 目录下的)
mkdir data
用户权限
对 MySQL 的基本操作,咱们就先执行到这里,接下来创立 MySQL 用户组、用户。
1、创立 MySQL 用户组。
groupadd mysql
2、创立 MySQL 用户。
useradd -r -g mysql mysql
3、更改 mysql 目录的用户组和用户权限。
chown -R mysql:mysql mysql
chmod -R 755 mysql
初始化装置
通过下面一系列的操作,MySQL 装置的基本操作也都筹备好了,接下来咱们就正式进入到 MySQL 的装置环境。这几步操作,须要分外的留神。
间接应用如下的命令,来初始化服务,在这个过程中 MySQL 会生成一个默认的明码,这个明码须要记住,后续登录到 MySQL 会应用到。
[root@192 bin]# /usr/local/mysql/bin/mysqld --initialize --user=mysql --datadir=/usr/local/mysql/data --basedir=/usr/local/mysql
2023-04-07T17:14:35.743452Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.30) initializing of server in progress as process 8353
2023-04-07T17:14:35.753503Z 1 [System] [MY-013576] [InnoDB] InnoDB initialization has started.
2023-04-07T17:14:36.629899Z 1 [System] [MY-013577] [InnoDB] InnoDB initialization has ended.
2023-04-07T17:14:38.277736Z 6 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: D(v>gZT0nOFb
通过下面的命令,如果没出什么谬误,就示意初始化实现。留神到最初一行的开端,root@localhost: D(v>gZT0nOFb
。MySQL 为咱们生成了一个初始密码,明码是D(v>gZT0nOFb
,你在初始化的时候不肯定是这个明码,依据本人的理论状况来。
创立配置文件
MySQL 初始化实现之后,接下来咱们创立一个配置文件(vim /etc/my.cnf
)。配置文件的内容如下,你能够依据本人的状况来编写,举荐间接应用上面的配置。
[client]
port = 3306
socket = /usr/local/mysql/data/mysql.sock
default-character-set = utf8mb4
[mysql]
default-character-set = utf8mb4
[mysqld]
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_general_ci
init_connect = 'SET NAMES utf8mb4'
port = 3306
socket = /usr/local/mysql/data/mysql.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
datadir = /usr/local/mysql/data
lower_case_table_names=1
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
创立好之后,须要对该文件进行配置权限,否则 MySQL 没权限执行该文件。
chmod 777 /etc/my.cnf
为了后续更加的不便操作 MySQL,能够为其创立软连贯。
ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql
ln -s /usr/local/mysql/bin/mysql /usr/bin/mysql
ln -s /usr/local/mysql/mysql.sock /var/mysql.sock
设置开机启动
为了缩小服务器重启之后,每次都要手动的去启动 MySQL,这里设置开机启动。顺次执行上面的每一条命令。
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
chkconfig --add mysqld
chkconfig --level 345 mysqld on
chkconfig --list
注:该输入后果只显示 SysV 服务,并不蕴含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置笼罩。要列出 systemd 服务,请执行 'systemctl list-unit-files'。查看在具体 target 启用的服务请执行
'systemctl list-dependencies [target]'。mysqld 0: 关 1: 关 2: 开 3: 开 4: 开 5: 开 6: 关
netconsole 0: 关 1: 关 2: 关 3: 关 4: 关 5: 关 6: 关
network 0: 关 1: 关 2: 开 3: 开 4: 开 5: 开 6: 关
如果看到 3、4 和 5 选项都显示开,示意设置胜利。
服务治理
上面列举对 MySQL 服务的治理命令,因为 centos7 和 centos6,在服务治理的命令有所扭转,6 的版本是应用 service,7 的版本是应用 systemctl,这里须要留神一下。
1、启动服务。
# 6 版本
service mysql start
# 7 版本
systemctl start mysql
2、重启服务
# 6 版本
service mysql restart
# 7 版本
systemctl restart mysql
3、进行服务
# 6 版本
service mysql stop
# 7 版本
systemctl stop mysql
4、查看服务状态
# 6 版本
service mysql status
# 7 版本
systemctl status mysql
操作 mysql
接下来,咱们就正式登录到 MySQL,去执行一些根底操作。
1、启动服务
systemctl restart mysql
2、登录 MySQL 服务
[root@192 bin]# mysql -uroot -p
mysql: [Warning] World-writable config file '/etc/my.cnf' is ignored.
Enter password:
Welcome to the MySQL monitor. Commands end with ; or \g.
Your MySQL connection id is 10
Server version: 8.0.30 MySQL Community Server - GPL
Copyright (c) 2000, 2022, Oracle and/or its affiliates.
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>
这里默认的明码,就是下面在初始化装置过程中 MySQL 主动生成的明码,输出明码即可。
3、批改默认的明码
alter user 'root'@'localhost' identified by '123456';
set password for root@localhost = '123456';
下面的两种形式,任意选一种即可。
4、设置近程连贯
如果你想开启 MySQL 中的 root 账户近程连贯全新啊,你能够应用如下的形式。这里不举荐开启,root 是 MySQL 中的超级管理员,开启可能会存在平安危险,这里为了做演示,故开启近程连贯模式。
mysql>use mysql;
msyql>update user set user.Host='%' where user.User='root';
mysql>flush privileges;
5、示例创立
这里通过创立一个数据库和数据表,用来演示。
mysql> create database demo;
Query OK, 1 row affected (0.05 sec)
mysql> use demo;
Database changed
mysql> create table demo (id int primary key, name varchar(32) not null);
Query OK, 0 rows affected (0.03 sec)
mysql> show tables;
+----------------+
| Tables_in_demo |
+----------------+
| demo |
+----------------+
1 row in set (0.00 sec)
到此为止,MySQL 在 Linux 上的装置也就正式实现啦。后续的章节,也都是基于该环境进行操作。
Docker 装置
下面演示完对 Linux 装置,接下来就简略演示一下应用 docker 装置,举荐应用官网提供的 Docker 镜像装置。因为官网镜像的应用文档写的十分具体了,我这里就不具体展现,做一个简略的演示即可。
1、创立一个 docker-compose.yml
的文件。并写入如下内容:
version: '3.1'
services:
db:
image: mysql
# NOTE: use of "mysql_native_password" is not recommended: https://dev.mysql.com/doc/refman/8.0/en/upgrading-from-previous-series.html#upgrade-caching-sha2-password
# (this is just an example, not intended to be a production configuration)
command: --default-authentication-plugin=mysql_native_password
restart: always
environment:
MYSQL_ROOT_PASSWORD: example
adminer:
image: adminer
restart: always
ports:
- 8081:8080
2、执行docker-compose.yml
,启动服务
$ docker-compose up -d
[+] Running 2/2
⠿ Container root-db-1 Running 0.0s
⠿ Container root-adminer-1 Started 1.0ss
3、查看服务启动状态
$ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
7310e996a435 adminer "entrypoint.sh php -…" 5 seconds ago Up 3 seconds 0.0.0.0:8081->8080/tcp root-adminer-1
通过命令输入的后果,能够看到容器曾经启动胜利了。
课后练习
1、MySQL 如果遗记 root 账户明码,该怎么解决?
2、MySQL 配置文件启动的程序是什么样的?
3、MySQL 服务启动的形式有哪几种?每种形式之间有什么区别?