上一篇,提到了我为什么要写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 mariadbmariadb-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 && lldrwxr-xr-x.  2 7161 31415   4096 7月   7 2022 bindrwxr-xr-x.  2 7161 31415     55 7月   7 2022 docsdrwxr-xr-x.  3 7161 31415   4096 7月   7 2022 includedrwxr-xr-x.  6 7161 31415    201 7月   7 2022 lib-rw-r--r--.  1 7161 31415 287624 7月   7 2022 LICENSEdrwxr-xr-x.  4 7161 31415     30 7月   7 2022 man-rw-r--r--.  1 7161 31415    666 7月   7 2022 READMEdrwxr-xr-x. 28 7161 31415   4096 7月   7 2022 sharedrwxr-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 mysqlchmod -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/mysql2023-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 83532023-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 = 3306socket = /usr/local/mysql/data/mysql.sockdefault-character-set = utf8mb4[mysql]  default-character-set = utf8mb4[mysqld]  character-set-client-handshake = FALSEcharacter-set-server = utf8mb4collation-server = utf8mb4_general_ciinit_connect = 'SET NAMES utf8mb4'port = 3306socket = /usr/local/mysql/data/mysql.sockskip-external-lockingkey_buffer_size = 16Mmax_allowed_packet = 1Mtable_open_cache = 64sort_buffer_size = 512Knet_buffer_length = 8Kread_buffer_size = 256Kread_rnd_buffer_size = 512Kmyisam_sort_buffer_size = 8Mdatadir = /usr/local/mysql/datalower_case_table_names=1[mysqldump]quickmax_allowed_packet = 16M[mysql]no-auto-rehash[myisamchk]key_buffer_size = 20Msort_buffer_size = 20Mread_buffer = 2Mwrite_buffer = 2M[mysqlhotcopy]interactive-timeout

创立好之后,须要对该文件进行配置权限,否则MySQL没权限执行该文件。

chmod 777 /etc/my.cnf

为了后续更加的不便操作MySQL,能够为其创立软连贯。

ln -s /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqlln -s /usr/local/mysql/bin/mysql /usr/bin/mysqlln -s /usr/local/mysql/mysql.sock /var/mysql.sock

设置开机启动

为了缩小服务器重启之后,每次都要手动的去启动MySQL,这里设置开机启动。顺次执行上面的每一条命令。

cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqldchmod +x /etc/init.d/mysqldchkconfig --add mysqldchkconfig --level 345 mysqld onchkconfig --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 -pmysql: [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 10Server version: 8.0.30 MySQL Community Server - GPLCopyright (c) 2000, 2022, Oracle and/or its affiliates.Oracle is a registered trademark of Oracle Corporation and/or itsaffiliates. Other names may be trademarks of their respectiveowners.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 changedmysql> 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 psCONTAINER ID   IMAGE            COMMAND                  CREATED          STATUS          PORTS                    NAMES7310e996a435   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服务启动的形式有哪几种?每种形式之间有什么区别?