Linux安装MySQL 【重新认识MySQL上篇】

本文涉及的产品
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,高可用系列 2核4GB
简介: 本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》该篇文章初心是介绍MySQL的安装,但是随着后面不断的学习,遇到的坑越来越多,导致本篇文章不断的更新,敬请谅解!

一、MySQL是怎么运行的

我们知道MySQL数据库是一个CS架构,即客户端服务器架构。


以我们平时使⽤的微信为例,它其实是由两部分组成的,⼀部分是客户端程序,⼀部分是服务器程序。客户端可能有很多种形式,⽐如

⼿机APP

电脑软件

⽹⻚版微信

每个客户端都有⼀个唯⼀的⽤户名,就是你的微信号,另⼀⽅⾯,腾讯公司在他们的机房⾥运⾏着⼀个服务器软件,我们平时操作微信其实都是⽤客户端来和这个服务器来打交道。⽐如张三⽤微信给李四发了⼀条消息的过程其实是这样的:


消息被客户端包装了⼀下,添加了发送者和接收者信息,然后从张三的微信客户端传送给微信服务器;

微信服务器从消息⾥获取到它的发送者和接收者,根据消息的接收者信息把这条消息送达到李四的微信客户端,李四的微信客户端⾥就显示出张三给他发了⼀条消息。

MySQL的使⽤过程跟这个是⼀样的,它的服务器程序直接和我们存储的数据打交道,然后可以有好多客户端程序连接到这个服务器程序,发送增删改查的请求,然后服务器就响应这些请求,从⽽操作它维护的数据。和微信⼀样,MySQL的每个客户端都需要提供⽤户名密码才能登录,登录之后才能给服务器发请求来操作某些数据。我们⽇常使⽤MySQL的情景⼀般是这样的:


启动MySQL服务器程序

启动MySQL客户端程序并连接到服务器程序

在客户端程序中输⼊⼀些命令语句作为请求发送到服务器程序,服务器程序收到这些请求后,会根据请求的内容来操作具体的数据并向客户端返回操作结果

我们知道在⼀台计算机上可以同时运⾏多个程序,每⼀个运⾏着的程序也被称为⼀个进程。我们的MySQL服务器程序和客户端程序本质上都算是计算机上的⼀个进程,这个代表着MySQL服务器程序的进程也被称为MySQL数据库实例,简称数据库实例。


每个进程都有⼀个唯⼀的编号,称为进程ID,英⽂名叫PID,这个编号是在我们启动程序的时候由操作系统随机分配的,操作系统会保证在某⼀时刻同⼀台机器上的进程号不重复。


⽐如你打开了计算机中的QQ程序,那么操作系统会为它分配⼀个唯⼀的进程号,如果你把这个程序关掉了,那操作系统就会把这个进程号回收,之后可能会重新分配给别的进程。当我们下⼀次再启动QQ程序的时候分配的就可能是另⼀个进程号。


每个进程都有⼀个名称,这个名称是编写程序的⼈⾃⼰定义的,⽐如我们启动的MySQL服务器进程的默认名称为mysqld, ⽽我们常⽤的MySQL客户端进程的默认名称为mysql


二、MySQL的安装

安装MySQL的时候是选择开发版本 OR GA版本?


我们需要知道的是开发版本具有最新功能,但生产环境不能使用;GA版本,也称为生产版本或稳定版本。我们一般选择GA版本。


MySQL发行版本名称是怎么来的?


发行版本名称由三个数字和一个可选的后缀组成。例如mysql-community-5.7.6-0.3.m16.el7.src.rpm。版本名称中的数字解释如下:


第一个数字(5):是主版本号。

第二个数字(7):是次要版本号。总而言之,主要和次要数字构成发行版本号。

第三个数字(6):是发行系列中的版本号。对于每个新的错误修正版本,此值均递增。在通常最新版本是最佳选择。

里程碑:后缀用于指示版本的稳定性。可能的后缀是:m N(例如, m1, m2, m3,…)表示里程碑编号。rc表示发布候选版(RC)。

通过MySQL的所有内部测试后,没有后缀则表示正式版,是我们生产环境中的主要选择的版本。


2.1 MySQL安装方式

首先,我们需要知道MySQL有以下

rpm包

通用二进制

源码编译

三种安装方式。我们通过源码编译安装的⽅式还是直接使⽤官⽅通用二进制进⾏安装之后,MySQL的服务器程序和客户端程序都会被安装到我们的机器上。不论使⽤上述两者的哪种安装⽅式,一定要记住MySQL的安装⽬录。不过在Linux下使⽤RPM包时会有单独的服务器RPM包和客户端RPM包,需要分别安装。


2.2 MySQL下载

rpm包下载

https://dev.mysql.com/downloads/mysql/mysql官网,点击Archives,选择对应的产品版本、安装方式和操作系统版本,点击Down进行下载

微信图片_20230527140540.png微信图片_20230527140515.png

通用二进制下载

https://dev.mysql.com/downloads/mysql/mysql官网,点击Archives,选择对应的产品版本、安装方式和操作系统版本,点击Down进行下载

微信图片_20230527140558.png

微信图片_20230527140615.png


源码编译下载

https://dev.mysql.com/downloads/mysql/mysql官网,点击Archives,选择对应的产品版本、安装方式和操作系统版本,点击Down进行下载

微信图片_20230527140632.png

微信图片_20230527140702.png

微信图片_20230527140714.png


2.3 前期准备工作

操作系统配置

[root@loclhost ~]# hostnamectl

  Static hostname: mysql2.x88.com

        Icon name: computer-vm

          Chassis: vm

       Machine ID: 28cae06eae1740acbdfe4f88be6ffeb0

          Boot ID: 1f9fe175b6a54d2dab41033927790634

   Virtualization: vmware

 Operating System: CentOS Linux 7 (Core)

      CPE OS Name: cpe:/o:centos:centos:7

           Kernel: Linux 3.10.0-1160.71.1.el7.x86_64

     Architecture: x86-64


修改主机名

[root@loclhost ~]# hostnamectl set-hostname mysql2.x88.com

1

安装常用的软件

[root@loclhost ~]# yum install lrzsz sysstat elinks wget net-tools bash-completion -y


关闭防火墙

[root@loclhost ~]# systemctl status firewalld

[root@loclhost ~]# systemctl stop firewalld

[root@loclhost ~]# systemctl disable firewalld

[root@loclhost ~]# systemctl status firewalld


关闭SELINUX状态

[root@loclhost ~]# getenforce

[root@loclhost ~]# sed -i 's/SELINUX=enforcing/SELINUX=disabled/g' /etc/selinux/config #永久关闭SELINUX

[root@loclhost ~]# setenforce 0 #临时关闭

[root@loclhost ~]# getenforce


重启服务器后,查看SELINUX状态

[root@loclhost ~]# init 6 #重启服务器

[root@mysql2 ~]# getenforce


2.4 RPM包安装MySQL

我们在根目录下创建一个 /data/install目录用来保存下载或者上传的mysql数据库的各种安装方式的安装包

微信图片_20230527140740.png

[root@mysql2 ~]# mkdir -p /data/install

[root@mysql2 ~]# cd /data/install/


在这里使用的lrzsz软件上传rpm安装包,或者大家也可以使用sftp等工具进行上传

如服务器有外网的情况下,我们也可以通过wget进行安装包下载

[root@mysql2 install]# wget -O /data/install/mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar

[root@mysql2 install]# rz


进行解压安装包

[root@mysql2 install]# tar -xvf mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar

1

卸载CentOS自带的Mariadb,如果系统没有安装Mariadb,可以忽略此步骤。

[root@mysql2 install]# rpm -qa | grep mariadb

mariadb-libs-5.5.68-1.el7.x86_64

[root@mysql2 install]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

安装MySQL需要的依赖包

[root@mysql2 install]# yum install net-tools prel -y

1

按照以下顺序进行MySQL的安装

mysql-community-common-5.7.39-1.el7.x86_64.rpm

mysql-community-libs-5.7.39-1.el7.x86_64.rpm

mysql-community-client-5.7.39-1.el7.x86_64.rpm 客户端

mysql-community-server-5.7.39-1.el7.x86_64.rpm 服务器端

[root@mysql2 install]# rpm -ivh mysql-community-common-5.7.39-1.el7.x86_64.rpm

[root@mysql2 install]# rpm -ivh mysql-community-libs-5.7.39-1.el7.x86_64.rpm

[root@mysql2 install]# rpm -ivh mysql-community-client-5.7.39-1.el7.x86_64.rpm

[root@mysql2 install]# rpm -ivh mysql-community-server-5.7.39-1.el7.x86_64.rpm


数据库安装完成,我们需要掌握以下命令来管理MySQL的启停

• systemctl start mysqld 启动

• systemctl stop mysqld 停止

• systemctl status mysqld 状态查询

• systemctl restart mysqld 重启

• systemctl enable mysqld 开机自动启动

• systemctl disable mysqld 关闭开机自动启动

启动MySQL

[root@mysql2 install]# systemctl status mysqld

[root@mysql2 install]# systemctl start mysqld

1

2

查询MySQL状态

我们可以通过 systemctl status mysqld 或者lsof -i:端口号来查询mysql的状态

[root@mysql2 install]# lsof -i:3306

1

查询MySQL初始化密码

安装mysql的时候,会把初始密码保存在日志里面,日志的位置在/var/log目录下的mysqld.log文件里面,我们使用如下命令查询初始化密码

[root@mysql2 install]# grep -i 'password' /var/log/mysqld.log

修改MySQL密码

查询到密码后,我们使用mysql -uroot -p命令输入查询到初始化密码登陆数据库

[root@mysql2 install]# mysql -uroot -p

Enter password:

## 忽略部分提示 ##

mysql>


登陆数据库成功后,使用alter命令修改root账户密码

alter user 'root'@'localhost' identified by '123456';

1

2.5 二进制安装MySQL

创建MySQL用户

MySQL用户建议虚拟用户,只用于MySQL进程运行使用,不允许登录、不创建家目录。

[root@mysql2 install]# useradd -s /sbin/nologin -M mysql

1

创建MySQL目录

系统目录 /opt/mysql/my-xx.xx

软连接 ln -s /opt/mysql/my-xx.xx /usr/local/mysql

数据目录 /data/mysql/my+port/{data,logs}

配置文件/data/mysql/my+port/my+port.cnf

[root@mysql2 install]# mkdir -p /data/mysql/my3306/{data,logs}

1

更改MySQL目录属主和属组

[root@mysql2 install]# chown -R mysql:mysql /data/mysql/

[root@mysql2 install]# chmod -R 750 /data/mysql/

1

2

解压上传到服务器的mysql二进制安装包

如服务器有外网的情况下可以使用wget进行下载

[root@mysql2 install]# wget -O /data/install/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz https://cdn.mysql.com/archives/mysql-5.7/mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

[root@mysql2 install]# rz

微信图片_20230527140812.png

解压二进制包

[root@mysql2 install]# tar -xvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz

将软件部分移动到指定目录

[root@mysql2 install]# mkdir -p /opt/mysql

[root@mysql2 install]# cp -R mysql-5.7.39-linux-glibc2.12-x86_64 /opt/mysql/


创建软连接到/usr/local/目录下,也就是我们MySQL的安装目录,一定要记住

[root@mysql2 install]# ln -s /opt/mysql/mysql-5.7.39-linux-glibc2.12-x86_64/ /usr/local/mysql

1

删除系统自带的mariadb,如果系统没有安装mariadb,可忽略

[root@mysql2 install]# rpm -qa | grep mariadb

mariadb-libs-5.5.68-1.el7.x86_64

[root@mysql2 install]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64

1

2

3

配置MySQL配置文件

[root@mysql2 install]# cat <<EOF>> /data/mysql/my3306/my3306.cnf

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/my3306/data

socket = /data/mysql/my3306/mysql.sock

server_id = 1

port = 3306

log_error=/data/mysql/my3306/logs/error.log

EOF

[root@mysql2 install]# more /data/mysql/my3306/my3306.cnf


安装二进制安装mysql所需要的依赖包

[root@mysql2 install]# yum install libaio-devel numactl -y

1

将该bin⽬录的路径加⼊到环境变量PATH中

这样现在不论我们所处的⼯作⽬录是啥,我们都可以直接输⼊可执⾏⽂件的名字就可以启动它

[root@mysql2 install]# cat <<EOF>> ~/.bash_profile

export PATH=/usr/local/mysql/bin:$PATH

EOF

[root@mysql2 install]# source ~/.bash_profile


初始化数据库

[root@mysql2 install]# mysqld --defaults-file=/data/mysql/my3306/my3306.cnf --initialize --user=mysql

1

--defaults-file 如果参数文件没有在默认的位置,需要手工指定my.cnf的位置

--initialize相对应的参数是—initialize-insecure。 “ 默认安全 ”安装(即包括生成随机初始的 root密码)。在这种情况下,密码被标记为已过期,您将需要选择一个新密码。使用--initialize-insecure,不会root生成密码。这是不安全的;可以直接登录进入。

--basedir=/usr/local/mysql 可选参数,如果my.cnf当中没有指定路径,需要手工指定,mysql软件位置。

--datadir=/opt/mysql/mysql/data 可选参数,如果my.cnf当中没有指定路径,需要手工指定,mysql数据目录位置。

--user=mysql 数据初始化后,所属的用户

查看密码

[root@mysql2 install]# grep -i 'password' /data/mysql/my3306/logs/error.log

1

后台启动mysql

nohup:结果默认会输出到nohup.out

&:后台运行

[root@mysql2 install]#nohup mysqld --defaults-file=/data/mysql/my3306/my3306.cnf  &

[root@mysql2 install]# lsof -i:3306

1

2

重置root密码

除了重置初始root密码的动作以外,其它全部默认即可。初始的root密码在错误日志当中

[root@mysql2 install]# mysql_secure_installation -uroot -p --socket=/data/mysql/my3306/mysql.sock

#输入日志里密码

Enter password:  

Securing the MySQL server deployment.

The existing password for the user account root has expired. Please set a new password.

#设置新密码

New password:

#确认新密码

Re-enter new password:

#是否设置验证密码插件

VALIDATE PASSWORD PLUGIN can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Using existing password for root.

Change the password for root ? ((Press y|Y for Yes, any other key for No) :

... skipping.

# 是否删除匿名账户

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

... skipping.

# 是否禁止远程登录root用户

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :

... skipping.

# 是否删除test 数据库

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

... skipping.

# 是否重新加载特权表

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

... skipping.

All done!


登陆mysql

[root@mysql2 install]# mysql -uroot -p --socket=/data/mysql/my3306/mysql.sock

Enter password:

## 忽略部分提示

mysql>


2.6 源码安装MySQL(了解)

源码安装的方式时间非常久,不推荐使用这种方式,如果是想了解mysql引擎源码,可以使用这种方式进行安装。

安装依赖包

[root@mysql2 install]# yum install gcc gcc-c++ openssl openssl-devel ncurses ncurses-devel bison make cmake -y

1

上传mysql二进制包

微信图片_20230527140833.png

如服务器有外网的情况下可以使用wget进行下载

[root@mysql2 install]# wget -O /data/install/mysql-community-5.7.39-1.el7.src.rpm https://cdn.mysql.com/archives/mysql-5.7/mysql-community-5.7.39-1.el7.src.rpm

[root@mysql2 install]# rz

1

安装mysql二进制包,生产源码包

[root@mysql2 install]# rpm -ivh mysql-community-5.7.39-1.el7.src.rpm

[root@mysql2 install]# ll ~/rpmbuild/SOURCES/

创建用户

[root@mysql2 install]# useradd -s /sbin/nologin -M mysql

1

删除系统自带的mariadb,没有没有安装,可以忽略

[root@mysql2 install]# rpm -qa | grep mariadb

mariadb-libs-5.5.68-1.el7.x86_64

[root@mysql2 install]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64


编译安装

[root@mysql2 install]# cd ~/rpmbuild/SOURCES/

[root@mysql2 SOURCES]#  tar -xvf mysql-5.7.39.tar.gz

[root@mysql2 SOURCES]# cd mysql-5.7.39/

[root@mysql2 mysql-5.7.39]# cp ../boost_1_59_0.tar.bz2 ./

[root@mysql2 mysql-5.7.39]# tar -xvf boost_1_59_0.tar.bz2

[root@mysql2 mysql-5.7.39]# cmake ./ -DWITH_BOOST=boost_1_59_0/ -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DSYSCONFDIR=/etc -DMYSQL_DATADIR=/usr/local/mysql/data -DINSTALL_MANDIR=/usr/share/man -DMYSQL_TCP_PORT=3306 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DEXTRA_CHARSETS=all -DDEFAULT_COLLATION=utf8_general_ci -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_EMBEDDED_SERVER=1 -DENABLED_LOCAL_INFILE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1


如果缓存失败,清除缓存,重新编译

[root@mysql2 mysql-5.7.39]# make clean

[root@mysql2 mysql-5.7.39]# rm CMakeCache.txt


安装

[root@mysql2 mysql-5.7.39]# make && make install

1

配置mysql配置文件

[root@mysql2 mysql-5.7.39]# cat <<EOF>> /etc/my.cnf

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/usr/local/mysql/data

socket = /tmp/mysql.sock

server_id = 1

port = 3306

log_error=/usr/local/mysql/data/error.log

EOF

[root@mysql2 mysql-5.7.39]# more /etc/my.cnf

配置环境变量

[root@mysql2 install]# cat <<EOF>> ~/.bash_profile

export PATH=/usr/local/mysql/bin:$PATH

EOF

[root@mysql2 install]# source ~/.bash_profile


初始化数据库

[root@mysql2 mysql-5.7.39]# mysqld --initialize --user=mysql  //使用/etc/my.cnf ,则不需要指定参数文件

查看密码

[root@mysql2 mysql-5.7.39]# grep -i 'password' /usr/local/mysql/data/error.log

2023-04-13T02:08:03.308852Z 1 [Note] A temporary password is generated for root@localhost: Y;_cFdha-4Lm


启动MySQL

[root@mysql2 mysql-5.7.39]## nohup mysqld &      //使用/etc/my.cnf ,则不需要指定参数文件

1

查看是否启动成功

[root@mysql2 mysql-5.7.39]# lsof -i:3306

COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME

mysqld  89895 mysql   23u  IPv6 183192      0t0  TCP *:mysql (LISTEN)


重置初始root密码

[root@mysql2 mysql-5.7.39]# mysql_secure_installation -uroot -p   //sock如果在/tmp/mysql.sock 则不需要指定

#输入日志里密码

Enter password:  

Securing the MySQL server deployment.

The existing password for the user account root has expired. Please set a new password.

#设置新密码

New password:

#确认新密码

Re-enter new password:

#是否设置验证密码插件

VALIDATE PASSWORD PLUGIN can be used to test passwords

and improve security. It checks the strength of password

and allows the users to set only those passwords which are

secure enough. Would you like to setup VALIDATE PASSWORD plugin?

Press y|Y for Yes, any other key for No:

Using existing password for root.

Change the password for root ? ((Press y|Y for Yes, any other key for No) :

... skipping.

# 是否删除匿名账户

By default, a MySQL installation has an anonymous user,

allowing anyone to log into MySQL without having to have

a user account created for them. This is intended only for

testing, and to make the installation go a bit smoother.

You should remove them before moving into a production

environment.

Remove anonymous users? (Press y|Y for Yes, any other key for No) :

... skipping.


# 是否禁止远程登录root用户

Normally, root should only be allowed to connect from

'localhost'. This ensures that someone cannot guess at

the root password from the network.

Disallow root login remotely? (Press y|Y for Yes, any other key for No) :


... skipping.

# 是否删除test 数据库

By default, MySQL comes with a database named 'test' that

anyone can access. This is also intended only for testing,

and should be removed before moving into a production

environment.

Remove test database and access to it? (Press y|Y for Yes, any other key for No) :

... skipping.

# 是否重新加载特权表

Reloading the privilege tables will ensure that all changes

made so far will take effect immediately.

Reload privilege tables now? (Press y|Y for Yes, any other key for No) :

... skipping.

All done!

13、连接mysql


[root@mysql2 mysql-5.7.39]# mysql -uroot -p123456

mysql>


三、多实例部署

3.1 多实例概念

如果一个系统有多个数据库端口(例如有3306 ,也有3307 )则这个服务器上是多实例。


MySQL实例构成


由进程+线程+预分配内存组成,mysql是单进程多线程的结构


进程:正在运行的程序

查看mysql进程:ps -ef |grep mysql

杀死mysql进程:kill 进程号、 pkill 进程名称

线程:Master thread、purge thread 、page cleaner thread、io thread

预分配内存:buffer pool、insert buffer、change buffer、double write

什么是多实例


在一台机器上由多个实例(进程+线程+预分配内存)构成

注意事项


系统共用,实例之间具有不同的datadir、server_id、port、日志文件、socket文件和配置文件


innodb_buffer_pool_size分配的总量要小于物理内存的80%


3.2 多实例安装(二进制)

安装需要的依赖包


[root@mysql2 install]# yum install libaio-devel numactl -y


创建用户


[root@mysql2 install]# useradd -s /sbin/nologin -M mysql


创建目录


[root@mysql2 install]# mkdir -p /data/mysql/{my3306,my3307}/{data,logs}


更改用户和组


[root@mysql2 install]# chown -R mysql:mysql /data/mysql/

[root@mysql2 install]# chmod -R 750 /data/mysql/

解压包


[root@mysql2 install]# tar -xvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz


将软件部分移动到指定目录


[root@mysql2 install]# mkdir -p /opt/mysql

[root@mysql2 install]# cp -R mysql-5.7.39-linux-glibc2.12-x86_64 /opt/mysql/

创建软连接


[root@mysql2 install]# ln -s /opt/mysql/mysql-5.7.39-linux-glibc2.12-x86_64/ /usr/local/mysql


删除系统自带的mariadb,如果没有安装mariadb,可忽略


[root@mysql2 install]# rpm -qa | grep mariadb

mariadb-libs-5.5.68-1.el7.x86_64

[root@mysql2 install]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64


创建配置文件


实例之间具有不同的datadir、server_id、port、日志文件、socket文件和配置文件


[root@mysql2 install]# cat <<EOF>> /data/mysql/my3306/my3306.cnf

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/my3306/data

socket = /data/mysql/my3306/mysql.sock

server_id = 1

port = 3306

log_error=/data/mysql/my3306/logs/error.log

EOF

[root@mysql2 install]# cat <<EOF>> /data/mysql/my3307/my3307.cnf

[mysqld]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/my3307/data

socket = /data/mysql/my3307/mysql.sock

server_id = 2

port = 3307

log_error=/data/mysql/my3307/logs/error.log

EOF


配置环境变量


[root@mysql2 install]# cat <<EOF>> ~/.bash_profile

export PATH=/usr/local/mysql/bin:$PATH

EOF

[root@mysql2 install]# source ~/.bash_profile


初始化数据库


[root@mysql2 install]# mysqld --defaults-file=/data/mysql/my3306/my3306.cnf --initialize --user=mysql

[root@mysql2 install]# mysqld --defaults-file=/data/mysql/my3307/my3307.cnf --initialize --user=mysql


查看密码


[root@mysql2 install]# grep -i 'password' /data/mysql/my3306/logs/error.log

[root@mysql2 install]# grep -i 'password' /data/mysql/my3307/logs/error.log


启动mysql


[root@mysql2 install]# nohup mysqld --defaults-file=/data/mysql/my3306/my3306.cnf  &

[root@mysql2 install]# nohup mysqld --defaults-file=/data/mysql/my3307/my3307.cnf  &


查看是否启动成功


[root@mysql2 install]# lsof -i:3306

[root@mysql2 install]# lsof -i:3307


重置root密码


[root@mysql2 install]# mysql_secure_installation -uroot -p --socket=/data/mysql/my3306/mysql.sock

[root@mysql2 install]# mysql_secure_installation -uroot -p --socket=/data/mysql/my3307/mysql.sock


16、连接msyql


[root@mysql2 install]# mysql -uroot -p123456 --socket=/data/mysql/my3306/mysql.sock

[root@mysql2 install]# mysql -uroot -p123456 --socket=/data/mysql/my3307/mysql.sock

1

2

mysql> select @@server_id;

+-------------+

| @@server_id |

+-------------+

|           2 |

+-------------+

1 row in set (0.00 sec)

mysql> select @@port;

+--------+

| @@port |

+--------+

|   3307 |

+--------+

1 row in set (0.00 sec)


3.3 mysqld_multi(多实例第二种安装方式)

安装需要的依赖包


[root@mysql2 install]# yum install libaio-devel numactl -y


创建用户


[root@mysql2 install]# useradd -s /sbin/nologin -M mysql


创建目录


[root@mysql2 install]# mkdir -p /data/mysql/{my3306,my3307}/{data,logs}


更改用户和组


[root@mysql2 install]# touch /data/mysql/{my3306,my3307}/logs/error.log

[root@mysql2 install]# chown -R mysql:mysql /data/mysql/

[root@mysql2 install]# chmod -R 750 /data/mysql/

解压安装包(二进制包)


[root@mysql2 install]# tar -xvf mysql-5.7.39-linux-glibc2.12-x86_64.tar.gz


将软件部分移动到指定目录

微信图片_20230527140851.png

[root@mysql2 install]# mkdir -p /opt/mysql

[root@mysql2 install]# cp -R mysql-5.7.39-linux-glibc2.12-x86_64 /opt/mysql/


创建软连接


[root@mysql2 install]# ln -s /opt/mysql/mysql-5.7.39-linux-glibc2.12-x86_64/ /usr/local/mysql


删除系统自带的mariadb,如果没有安装mariadb,可忽略


[root@mysql2 install]# rpm -qa | grep mariadb

mariadb-libs-5.5.68-1.el7.x86_64

[root@mysql2 install]# rpm -e --nodeps mariadb-libs-5.5.68-1.el7.x86_64


配置环境变量


[root@mysql2 install]# cat <<EOF>> ~/.bash_profile

export PATH=/usr/local/mysql/bin:$PATH

EOF

[root@mysql2 install]# source ~/.bash_profile


创建多实例配置文件


[root@mysql2 install]# cat <<EOF>> /etc/my_multi.cnf

[mysqld_multi]  

mysqld     = /usr/local/mysql/bin/mysqld_safe  

mysqladmin = /usr/local/mysql/bin/mysqladmin  


[mysqld1]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/my3306/data

socket = /data/mysql/my3306/mysql.sock

server_id = 1

port = 3306

log_error=/data/mysql/my3306/logs/error.log

[mysqld2]

user=mysql

basedir=/usr/local/mysql

datadir=/data/mysql/my3307/data

socket = /data/mysql/my3307/mysql.sock

server_id = 2

port = 3307

log_error=/data/mysql/my3307/logs/error.log

EOF


初始化实例


我们需要知道的mysqld_multi启动的时候会自动初始化数据库


初始化所有实例

[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start

[root@mysql2 install]# lsof -i:3306

[root@mysql2 install]# lsof -i:3307


初始化实例完成后,查询数据库没有启动,–log参数查询什么原因,如下


[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 2 --log=/tmp/error.log

1

初始化一个实例

[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 2

1

重置root密码


[root@mysql2 install]# mysql_secure_installation -uroot -p --socket=/data/mysql/my3306/mysql.sock

[root@mysql2 install]# mysql_secure_installation -uroot -p --socket=/data/mysql/my3307/mysql.sock

连接mysql


[root@mysql2 install]# mysql -uroot -p123456 --socket=/data/mysql/my3306/mysql.sock

[root@mysql2 install]# mysql -uroot -p123456 --socket=/data/mysql/my3307/mysql.sock

mysql> select @@server_id;

+-------------+

| @@server_id |

+-------------+

|           2 |

+-------------+

1 row in set (0.00 sec)

mysql> select @@port;

+--------+

| @@port |

+--------+

|   3307 |

+--------+

1 row in set (0.00 sec)


停止单个实例


[root@mysql2 install]# mysqladmin -uroot -p123456 shutdown --socket=/data/mysql/my3306/mysql.sock

[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf --password=123456 --user=root stop 2


停止全部实例


[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf --password=123456 --user=root stop


查看全部实例状态


[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf report


查看单个实例状态


[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf report 3307


3.4 使用service 控制实例的启停

1、修改脚本如下


[root@mysql2 install]# cd /usr/local/mysql/support-files/

[root@mysql2 support-files]# more mysqld_multi.server

#!/bin/sh

#

# A simple startup script for mysqld_multi by Tim Smith and Jani Tolonen.

# This script assumes that my.cnf file exists either in /etc/my.cnf or

# /root/.my.cnf and has groups [mysqld_multi] and [mysqldN]. See the

# mysqld_multi documentation for detailed instructions.

#

# This script can be used as /etc/init.d/mysql.server

#

# Comments to support chkconfig on RedHat Linux

# chkconfig: 2345 64 36

# description: A very fast and reliable SQL database engine.

#

# Version 1.0

#

basedir=/usr/local/mysql

bindir=/usr/local/mysql/bin

if test -x $bindir/mysqld_multi

then

 mysqld_multi="$bindir/mysqld_multi";

else

 echo "Can't execute $bindir/mysqld_multi from dir $basedir";

 exit;

fi

case "$1" in

   'start' )

       "$mysqld_multi" --defaults-extra-file=/etc/my_multi.cnf start $2

       ;;

   'stop' )

       "$mysqld_multi" --defaults-extra-file=/etc/my_multi.cnf --password=123456 --user=root stop $2

       ;;

   'report' )

       "$mysqld_multi" --defaults-extra-file=/etc/my_multi.cnf report $2

       ;;

   'restart' )

       "$mysqld_multi" --defaults-extra-file=/etc/my_multi.cnf --password=123456 --user=root stop $2

       "$mysqld_multi" --defaults-extra-file=/etc/my_multi.cnf  start $2

       ;;

   *)

       echo "Usage: $0 {start|stop|report|restart}" >&2

       ;;

esac


测试脚本是否可以使用


[root@mysql2 support-files]# ./mysqld_multi.server report

Reporting MySQL servers

MySQL server from group: mysqld1 is running

MySQL server from group: mysqld2 is not running

[root@mysql2 support-files]# ./mysqld_multi.server start 2

[root@mysql2 support-files]# ./mysqld_multi.server report

Reporting MySQL servers

MySQL server from group: mysqld1 is running

MySQL server from group: mysqld2 is running

[root@mysql2 support-files]# ./mysqld_multi.server stop

[root@mysql2 support-files]# ./mysqld_multi.server report

Reporting MySQL servers

MySQL server from group: mysqld1 is not running

MySQL server from group: mysqld2 is not running


添加到mysqlds到service


[root@mysql2 support-files]# cp /usr/local/mysql/support-files/mysqld_multi.server /etc/init.d/mysqld_multi

[root@mysql2 support-files]# chkconfig /etc/init.d/mysqld_multi on

[root@mysql2 support-files]# chkconfig mysqld_multi --list


注:该输出结果只显示 SysV 服务,并不包含

原生 systemd 服务。SysV 配置数据

可能被原生 systemd 配置覆盖。


     要列出 systemd 服务,请执行 'systemctl list-unit-files'。

     查看在具体 target 启用的服务请执行

     'systemctl list-dependencies [target]'。


mysqld_multi    0:关 1:关 2:开 3:开 4:开 5:开 6:关

[root@mysql2 init.d]# service mysqld_multi start

WARNING: my_print_defaults command not found.

Please make sure you have this command available and

in your path. The command is available from the latest

MySQL distribution.

ABORT: Can't find command 'my_print_defaults'.

This command is available from the latest MySQL

distribution. Please make sure you have the command

in your PATH.


解决方法


[root@mysql2 init.d]# cp /usr/local/mysql/bin/my_print_defaults /usr/bin/

[root@mysql2 init.d]# service mysqld_multi start

[root@mysql2 init.d]# service mysqld_multi report

Reporting MySQL servers

MySQL server from group: mysqld1 is running

MySQL server from group: mysqld2 is running

[root@mysql2 init.d]# service mysqld_multi stop 1

[root@mysql2 init.d]# service mysqld_multi start 1


五、数据库远程连接

无非就是创建一个'root'@'%'用户,授予所有权限。后面会讲到的,这里就不唠叨了


小提示:

%代表任何主机,后面会有讲解

很多小伙伴问为什么要创建用户,grant 在MySQL 8版本后无法创建用户


mysql> create user  'root'@'%'  identified by '123456';

mysql> grant all privileges on *.*  to  'root'@'%'  with grant option;

Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;

Query OK, 0 rows affected (0.01 sec)


六、数据库卸载

6.1 通用二进制 OR 源码编译安装 OR 多实例卸载MySQL

查找MySQL进程PID


[root@mysql2 install]# lsof -i:MySQL端口


kill进程


[root@mysql2 install]# kill -9 PID号


查找安装MySQL的所有目录,删除即可


[root@mysql2 install]# find / -name mysql

[root@mysql2 install]# rm -rf 查询出来的目录


删除用户和组


[root@mysql2 install]# userdel -r mysql

[root@mysql2 install]# groupdel -f msyql


6.2 RPM安装卸载

停止MySQL服务


[root@mysql2 ~]# systemctl stop mysqld


卸载MySQL


[root@mysql2 ~]# rpm -qa | grep mysql

[root@mysql2 ~]# rpm -e --nodeps 查询出来的rpm包


查找安装MySQL的所有目录,删除即可


[root@mysql2 install]# find / -name mysql

[root@mysql2 install]# rm -rf 查询出来的目录


删除用户和组


[root@mysql2 install]# userdel -r mysql

[root@mysql2 install]# groupdel -f msyql

总结

MySQL数据库是一个CS架构,即客户端服务器架构

MySQL的⼤部分安装包都包含了服务器程序和客户端程序,不过在Linux下使⽤RPM包时会有单独的服务器RPM包和客户端RPM包,需要分别安装。

源码和二进制安装MySQL⼀定⼀定⼀定要记住你把MySQL安装到哪了,换句话说,⼀定要记住MySQL的安装⽬录

关于啥是环境变量以及如何在当前系统中添加或修改系统变量不是我们唠叨的范围,⼤家找本相关的书或者上⽹查⼀查哈

MySQL 8.0 安装方式和MySQL 5.7一样,此处就不在唠叨了,但是注意在配置文件里添加 lower-case-table-names=1忽略大小写,要不然后期你可能找不到表,也无法修改该变量。


相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
12天前
|
存储 安全 数据管理
如何在 Rocky Linux 8 上安装和配置 Elasticsearch
本文详细介绍了在 Rocky Linux 8 上安装和配置 Elasticsearch 的步骤,包括添加仓库、安装 Elasticsearch、配置文件修改、设置内存和文件描述符、启动和验证 Elasticsearch,以及常见问题的解决方法。通过这些步骤,你可以快速搭建起这个强大的分布式搜索和分析引擎。
29 5
|
12天前
|
关系型数据库 MySQL Linux
Linux环境下MySQL数据库自动定时备份实践
数据库备份是确保数据安全的重要措施。在Linux环境下,实现MySQL数据库的自动定时备份可以通过多种方式完成。本文将介绍如何使用`cron`定时任务和`mysqldump`工具来实现MySQL数据库的每日自动备份。
31 3
|
12天前
|
监控 关系型数据库 MySQL
Linux环境下MySQL数据库自动定时备份策略
在Linux环境下,MySQL数据库的自动定时备份是确保数据安全和可靠性的重要措施。通过设置定时任务,我们可以每天自动执行数据库备份,从而减少人为错误和提高数据恢复的效率。本文将详细介绍如何在Linux下实现MySQL数据库的自动定时备份。
26 3
|
13天前
|
SQL 关系型数据库 MySQL
go语言数据库中mysql驱动安装
【11月更文挑战第2天】
29 4
|
19天前
|
关系型数据库 MySQL Linux
在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比
本文介绍了在 CentOS 7 中通过编译源码方式安装 MySQL 数据库的详细步骤,并与使用 RPM 包安装进行了对比。通过具体案例,读者可以了解如何准备环境、下载源码、编译安装、配置服务及登录 MySQL。编译源码安装虽然复杂,但提供了更高的定制性和灵活性,适用于需要高度定制的场景。
56 3
|
7天前
|
运维 关系型数据库 MySQL
安装MySQL8数据库
本文介绍了MySQL的不同版本及其特点,并详细描述了如何通过Yum源安装MySQL 8.4社区版,包括配置Yum源、安装MySQL、启动服务、设置开机自启动、修改root用户密码以及设置远程登录等步骤。最后还提供了测试连接的方法。适用于初学者和运维人员。
64 0
|
8天前
|
存储 缓存 Linux
【Linux】另一种基于rpm安装yum的方式
通过本文的方法,您可以在离线环境中使用RPM包安装YUM并进行必要的配置。这种方法适用于无法直接访问互联网的服务器或需要严格控制软件源的环境。通过配置本地YUM仓库,确保了软件包的安装和更新可以顺利进行。希望本文能够为您在特定环境中部署YUM提供实用的指导。
54 0
|
14天前
|
关系型数据库 MySQL Linux
Linux-安装Mariadb
本文介绍了在 Alibaba Cloud Linux 系统上安装和配置 MariaDB 10.5 的步骤。包括下载安装、初始化数据库、启动服务、处理启动失败的常见问题(如权限问题),以及如何连接数据库、设置密码和允许外部连接。通过这些步骤,您可以顺利完成 MariaDB 的安装和基本配置。
29 0
|
11天前
|
SQL 关系型数据库 MySQL
12 PHP配置数据库MySQL
路老师分享了PHP操作MySQL数据库的方法,包括安装并连接MySQL服务器、选择数据库、执行SQL语句(如插入、更新、删除和查询),以及将结果集返回到数组。通过具体示例代码,详细介绍了每一步的操作流程,帮助读者快速入门PHP与MySQL的交互。
26 1
|
1月前
|
存储 关系型数据库 MySQL
Mysql(4)—数据库索引
数据库索引是用于提高数据检索效率的数据结构,类似于书籍中的索引。它允许用户快速找到数据,而无需扫描整个表。MySQL中的索引可以显著提升查询速度,使数据库操作更加高效。索引的发展经历了从无索引、简单索引到B-树、哈希索引、位图索引、全文索引等多个阶段。
63 3
Mysql(4)—数据库索引
下一篇
无影云桌面