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

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
云数据库 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忽略大小写,要不然后期你可能找不到表,也无法修改该变量。


相关实践学习
如何快速连接云数据库RDS MySQL
本场景介绍如何通过阿里云数据管理服务DMS快速连接云数据库RDS MySQL,然后进行数据表的CRUD操作。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
11天前
|
关系型数据库 MySQL 数据库
Docker Compose V2 安装常用数据库MySQL+Mongo
以上内容涵盖了使用 Docker Compose 安装和管理 MySQL 和 MongoDB 的详细步骤,希望对您有所帮助。
82 42
|
10天前
|
Ubuntu Java Linux
Linux 安装 Qualcomm ® SnapdragonTM Profiler
通过本文的详细介绍,您应该已经成功在 Linux 系统上安装并配置了 Qualcomm® Snapdragon™ Profiler,并能够连接 Android 设备进行性能分析。Snapdragon Profiler 提供了丰富的工具和功能,可以帮助开发者深入了解应用程序的性能瓶颈,从而进行优化。希望本文能对您有所帮助,让您在开发过程中更高效地使用 Snapdragon Profiler 进行性能分析和优化。
41 10
|
11天前
|
Linux
Linux安装svn并启动
Linux安装svn并启动
48 10
|
1月前
|
Oracle 关系型数据库 Linux
linux8安装oracle 11g遇到的问题记录
Oracle 11g在Linux 8上安装时会遇到link编译环节的问题。官方建议忽略安装中的链接错误,安装完成后应用DBPSU 11.2.0.4.240716补丁及一次性补丁33991024,再重新编译二进制文件,并配置监听器和数据库。但因11g已退出服务期,这些补丁需付费获取。网上信息显示22年1月的PSU补丁也可解决问题,找到该补丁后按常规方式打补丁即可。如有需求或疑问可咨询我。
70 20
|
30天前
|
弹性计算 运维 Ubuntu
os-copilot在Alibaba Cloud Linux镜像下的安装与功能测试
我顺利使用了OS Copilot的 -t -f 功能,我的疑惑是在换行的时候就直接进行提问了,每次只能写一个问题,没法连续换行更有逻辑的输入问题。 我认为 -t 管道 功能有用 ,能解决环境问题的连续性操作。 我认为 -f 管道 功能有用 ,可以单独创建可连续性提问的task问题。 我认为 | 对文件直接理解在新的服务器理解有很大的帮助。 此外,我还有建议 可以在非 co 的环境下也能进行连续性的提问。
71 7
|
1月前
|
安全 关系型数据库 MySQL
CentOS7仅安装部署MySQL80客户端
通过上述步骤,你可以在CentOS 7上成功安装并配置MySQL 8.0客户端。这个过程确保你能够使用MySQL客户端工具连接和管理远程的MySQL数据库,而不需要在本地安装MySQL服务器。定期更新MySQL客户端可以确保你使用的是最新的功能和安全修复。
155 16
|
2月前
|
NoSQL 关系型数据库 Redis
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
《docker高级篇(大厂进阶):1.Docker复杂安装详说》包括:安装mysql主从复制、安装redis集群
123 14
|
1月前
|
关系型数据库 MySQL 应用服务中间件
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
《docker基础篇:8.Docker常规安装简介》包括:docker常规安装总体步骤、安装tomcat、安装mysql、安装redis
121 7
|
2月前
|
关系型数据库 MySQL Linux
Linux下mysql数据库的导入与导出以及查看端口
本文详细介绍了在Linux下如何导入和导出MySQL数据库,以及查看MySQL运行端口的方法。通过这些操作,用户可以轻松进行数据库的备份与恢复,以及确认MySQL服务的运行状态和端口。掌握这些技能,对于日常数据库管理和维护非常重要。
133 8