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

这篇具有很好参考价值的文章主要介绍了Linux安装MySQL 【重新认识MySQL上篇】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言

本文章收录在MySQL性能优化+原理+实战专栏,点击此处查看开篇介绍。

本文摘录自 ▪ 小孩子4919《MySQL是怎样运行的:从根儿上理解MySQL》

该篇文章初心是介绍MySQL的安装,但是随着后面不断的学习,遇到的坑越来越多,导致本篇文章不断的更新,敬请谅解!

Linux安装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进行下载

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

  • 通用二进制下载

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

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

  • 源码编译下载

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

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

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

安装常用的软件

[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数据库的各种安装方式的安装包

[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

Linux安装MySQL 【重新认识MySQL上篇】
进行解压安装包

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

卸载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

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

  1. mysql-community-common-5.7.39-1.el7.x86_64.rpm
  2. mysql-community-libs-5.7.39-1.el7.x86_64.rpm
  3. mysql-community-client-5.7.39-1.el7.x86_64.rpm 客户端
  4. 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

查询MySQL状态

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

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

查询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';

2.5 二进制安装MySQL

创建MySQL用户

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

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

创建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}

更改MySQL目录属主和属组

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

解压上传到服务器的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

Linux安装MySQL 【重新认识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/

创建软连接到/usr/local/目录下,也就是我们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 

配置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

将该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

--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

后台启动mysql

nohup:结果默认会输出到nohup.out
&:后台运行

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

重置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

上传mysql二进制包

如服务器有外网的情况下可以使用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

Linux安装MySQL 【重新认识MySQL上篇】
安装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

删除系统自带的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

配置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 ,则不需要指定参数文件

查看是否启动成功

[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
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 

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

[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

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

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

[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 2 --log=/tmp/error.log
  • 初始化一个实例
[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start 2

重置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忽略大小写,要不然后期你可能找不到表,也无法修改该变量。

Linux安装MySQL 【重新认识MySQL上篇】文章来源地址https://www.toymoban.com/news/detail-439161.html

到了这里,关于Linux安装MySQL 【重新认识MySQL上篇】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 五.实战软件部署 1-3实战章节-前言&MYSQL 5.7版本在centos系统安装&MYSQL 8.0版本在centos系统安装

    目录 五.实战软件部署 1-实战章节-前言 五.实战软件部署 2-MYSQL 5.7版本在centos系统安装 1-配置yum仓库 2-使用yum安装mysql 3-安装完成后,启动mysql并配置开机自启动 4-检查mysql的运行状态 --配置 1-获取mysql的初识密码 2-登录mysql数据库系统 3-修改root用户密码 4-配置root的简单密码

    2024年02月21日
    浏览(49)
  • 记录第一篇被”华为开发者联盟鸿蒙专区 “收录的文章

    记录第一篇被”华为开发者联盟鸿蒙专区 “社区收录的文章。 坚持写作的动力是什么? 是记录、分享,以及更好的思考 。  

    2024年02月14日
    浏览(39)
  • ElasticSearch篇——认识、安装和使用IK分词器插件,一篇文章带你彻底拿下!

    一、什么是IK分词器 所谓分词,即把一段中文或者别的划分成一个个的,我们在搜索时会把自己的信息进行分词,会把数据库中或者索引库中的数据进行分词,然后进行一个匹配的操作,默认的中文分词器是将每一个字看成一个词,比如“我爱中国”会被分成“我”、

    2024年02月03日
    浏览(38)
  • C++ 基础知识 四 ( 认识STL 上篇 )

    Standard Template Library:标准模板库 是一个基于泛型的C++类模板库由Alexander Stepanov于1994年开发 其目的是为了提供一致通用和高效的数据结构和算法,同时不限制用户所处理的数据类型和编程范式。STL的原型最初由Andrew Koenig和其它C++专家小组进行设计并在1995年C++标准委员会的推

    2024年02月03日
    浏览(50)
  • 重新认识小米

    被镁光灯聚焦的企业,总是会被贴上各种标签。 8月14日,小米科技创始人雷军以“成长”为主题的年度演讲,刷遍社交网络。提到小米,你首先想到什么?手机发烧友、极致性价比,还是最年轻的500强? 这些都是外界用自己的视角贴上的标签,或许从作为创始人的雷军的话

    2024年02月12日
    浏览(35)
  • 重新认识Word——页眉页脚

    我们之前已经全面的构建了我们的文章,现在我们来了解一下,我们毕业论文的页眉(页面信息)页脚(页码)的设置。 一份Word文档是由 字,行,段,页,节 组成的,前面几个还比较好理解,那这个 节 是干什么的呢?其实节就是 不同的格式 ,Word里面不同的章节可能对页

    2024年02月01日
    浏览(43)
  • 重新认识Android中的线程

    new Thread:可复写Thread#run方法。也可以传递Runnable对象,更加灵活。 缺点:缺乏统一管理,可能无限制新建线程,相互之间竞争,及可能占用过多系统的资源导致死机或oom。 AsyncTask,轻量级的异步任务工具类,提供任务执行的进度回调给UI线程 场景:需要知晓任务执行的进度

    2024年02月11日
    浏览(31)
  • 通过Nginx重新认识HTTP错误码

    在web开发过程中,通过HTTP错误码快速定位问题是一个非常重要的技能,同时Nginx是非常常用的一个实现HTTP协议的服务,因此本文结合二者谈谈Nginx对HTTP错误码的处理。 在RFC2616对HTTP协议做了定义,其对错误码定义分为5大类,依次分为100-199、200-299、300-399、400-499、500-599。 1

    2024年02月07日
    浏览(36)
  • Kerberos 重新认识 From Oracle安全

    https://docs.oracle.com/cd/E24847_01/html/819-7061/seamtm-1.html#scrolltoc Kerberos服务是一种网络身份认证协议,由麻省理工学院(MIT)开发。它提供了强大的身份验证功能,用于在计算机网络中验证用户和服务之间的身份。Kerberos采用了一种基于密钥的认证机制,通过使用加密票证来证实用户

    2024年02月12日
    浏览(34)
  • 【数字IC精品文章收录】近500篇文章|学习路线|基础知识|接口|总线|脚本语言|芯片求职|安全|EDA|工具|低功耗设计|Verilog|低功耗|STA|设计|验证|FPGA|架构|AMBA|书籍|

    1.1 索引目的 本篇索引旨在 收藏CSDN全站中有关数字IC领域高价值文章 ,在数字芯片领域中,就算将架构,设计,验证,DFT,后端诸多岗位加在一起的数量,都不及软件类一个细分方向的岗位数量多,反映在社区氛围或是开源资料的丰富度而言,数字IC领域相较于软件/互联网领

    2024年02月03日
    浏览(120)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包