MySQL安装和配置(保姆级别和全网最详细教程)

news2024/10/2 10:36:42

前言

MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,属于 Oracle 旗下产品。MySQL是最流行的关系型数据库管理系统之一,在 WEB 应用方面,MySQL是最好的 RDBMS (Relational Database Management System,关系数据库管理系统) 应用软件之一。具体可以在【数据库原理 • 一】数据库系统概念进行了解。

在这里插入图片描述

MySQL安装和配置)

  • 一、版本介绍
    • 1.1 安装开发版本还是通用版本(GA)
    • 1.2 mysql命名方案
  • 二、mysql安装方式和下载
    • 2.1 mysql安装方式
    • 2.2 mysql下载
  • 三、mysql安装
    • 3.1 前期准备工作
      • 3.1.1 操作系统配置
      • 3.1.2 修改主机名
      • 3.1.3 安装常用的软件
      • 3.1.4 关闭防火墙
    • 3.2 rpm包按装mysql
      • 3.2.1 解压上传服务器的rpm包
      • 3.2.2 安装mysql
      • 3.2.2 卸载mysql
    • 3.3 二进制安装mysql
      • 3.3.1 安装mysql规范
      • 3.3.2 解压上传服务器的rpm包
      • 3.3.3 安装mysql
      • 3.3.4 使用service控制mysql启动或关闭
      • 3.3.5 卸载mysql
    • 3.4 源码安装mysql(了解)
      • 3.4.1 安装依赖包
      • 3.4.2 生成源码包
      • 3.4.3 编译安装mysql
      • 3.4.4 卸载mysql
  • 四、多实例部署
    • 4.1 多实例概念
    • 4.2 多实例安装(二进制)
    • 4.3 mysqld_multi(多实例第二种安装方式)
    • 4.4 使用service 控制实例的启停
    • 4.5 卸载mysql多实例

一、版本介绍

1.1 安装开发版本还是通用版本(GA)

  • 开发版本具有最新功能,但生产环境不能使用
  • GA版本,也称为生产版本或稳定版本。

1.2 mysql命名方案

mysql命名方案使用的发行版本名称由三个数字和一个可选的后缀组成。例如mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar。版本名称中的数字解释如下:

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

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

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

  • 里程碑: 后缀用于指示版本的稳定性。可能的后缀是:m N(例如, m1, m2, m3,…)表示里程碑编号。rc表示发布候选(RC)。通过mysql的所有内部测试后,发布候选版本被认为是稳定的。没有后缀表示正式版。生产环境中的主要的选择类型。如图:

在这里插入图片描述

二、mysql安装方式和下载

2.1 mysql安装方式

首先mysql有以下三种安装方式

  • rpm包形式
  • 通用二进制形式 (首选)
  • 源码编译(了解)

2.2 mysql下载

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

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

三、mysql安装

3.1 前期准备工作

3.1.1 操作系统配置

[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

3.1.2 修改主机名

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

3.1.3 安装常用的软件

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

3.1.4 关闭防火墙

查询防火墙状态

[root@loclhost ~]# systemctl status firewalld

在这里插入图片描述

关防火墙

[root@loclhost ~]# systemctl stop firewalld #关闭防火墙
[root@loclhost ~]# systemctl disable firewalld #开机不启动防火墙
[root@loclhost ~]# systemctl status firewalld #查询防火墙状态

在这里插入图片描述

查询SELINUX状态

[root@loclhost ~]# getenforce

在这里插入图片描述

关闭SELINUX

[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 

在这里插入图片描述

3.2 rpm包按装mysql

3.2.1 解压上传服务器的rpm包

我们创建一个目录,用来保存上传或者下载的rpm包,使用df -h命令查询磁盘的大小和挂载点

[root@mysql2 ~]# df -h #查询磁盘容量

在这里插入图片描述
可以看出当前服务 / 目录下有183G,只使用了3%

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

这里使用使用lrzsz 上传rpm安装包,也可以使用sftp等工具

安装包下载参考本文章 2.2章节
如服务器有外网的情况下可以使用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

在这里插入图片描述
解压我们刚才上传rpm安装包

[root@mysql2 install]# ll
总用量 543132
-rw-r--r-- 1 root root 556165120 4月  12 12:37 mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar
[root@mysql2 install]# tar -xvf mysql-5.7.39-1.el7.x86_64.rpm-bundle.tar #解压rpm安装包
mysql-community-client-5.7.39-1.el7.x86_64.rpm
mysql-community-common-5.7.39-1.el7.x86_64.rpm
mysql-community-devel-5.7.39-1.el7.x86_64.rpm
mysql-community-embedded-5.7.39-1.el7.x86_64.rpm
mysql-community-embedded-compat-5.7.39-1.el7.x86_64.rpm
mysql-community-embedded-devel-5.7.39-1.el7.x86_64.rpm
mysql-community-libs-5.7.39-1.el7.x86_64.rpm
mysql-community-libs-compat-5.7.39-1.el7.x86_64.rpm
mysql-community-server-5.7.39-1.el7.x86_64.rpm
mysql-community-test-5.7.39-1.el7.x86_64.rpm

3.2.2 安装mysql

首先我们卸载CentOS自带的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  #--nodeps 参数是忽略依赖关系

安装 rpm 安装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
警告:mysql-community-common-5.7.39-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-common-5.7.39-1.e################################# [100%]
[root@mysql2 install]# rpm -ivh mysql-community-libs-5.7.39-1.el7.x86_64.rpm
警告:mysql-community-libs-5.7.39-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-libs-5.7.39-1.el7################################# [100%]
[root@mysql2 install]# rpm -ivh mysql-community-client-5.7.39-1.el7.x86_64.rpm
警告:mysql-community-client-5.7.39-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-client-5.7.39-1.e################################# [100%]
[root@mysql2 install]# rpm -ivh mysql-community-server-5.7.39-1.el7.x86_64.rpm
警告:mysql-community-server-5.7.39-1.el7.x86_64.rpm: 头V4 RSA/SHA256 Signature, 密钥 ID 3a79bd29: NOKEY
准备中...                          ################################# [100%]
正在升级/安装...
   1:mysql-community-server-5.7.39-1.e################################# [100%]

数据库安装完成,实际坏境中,需要掌握以下命令来管理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
● mysqld.service - MySQL Server
   Loaded: loaded (/usr/lib/systemd/system/mysqld.service; enabled; vendor preset: disabled)
   Active: inactive (dead)
     Docs: man:mysqld(8)
           http://dev.mysql.com/doc/refman/en/using-systemd.html

在这里插入图片描述

[root@mysql2 install]# systemctl start mysqld
[root@mysql2 install]# lsof -i:3306 #也可以使用systemctl status mysqld 查询mysql状态
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  2938 mysql   21u  IPv6  40870      0t0  TCP *:mysql (LISTEN)

修改初始化密码

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

[root@mysql2 install]# cat /var/log/mysqld.log | grep 'password is generated'

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

[root@mysql2 install]# mysql -uroot -p
Enter password: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 5.7.39

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

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

mysql> alter user 'root'@'localhost' identified by 'Cjlr2023!';
Query OK, 0 rows affected (0.00 sec)

授权root账户所有资源,并且可以远程登陆

mysql> grant all privileges on *.*  to  'root'@'%'  identified by 'Cjlr2023!'  with grant option;
Query OK, 0 rows affected, 1 warning (0.00 sec)

刷新权限

mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)

远程登陆测试

在这里插入图片描述

3.2.2 卸载mysql

查看当前mysql安装情况

[root@mysql2 install]# rpm -qa | grep mysql
mysql-community-common-5.7.39-1.el7.x86_64
mysql-community-client-5.7.39-1.el7.x86_64
mysql-community-server-5.7.39-1.el7.x86_64
mysql-community-libs-5.7.39-1.el7.x86_64

停止mysql服务

[root@mysql2 install]# systemctl stop mysqld

卸载之前安装的mysql

[root@mysql2 install]# rpm -evh --nodeps mysql-community-server-5.7.39-1.el7.x86_64 mysql-community-client-5.7.39-1.el7.x86_64 mysql-community-libs-5.7.39-1.el7.x86_64 mysql-community-common-5.7.39-1.el7.x86_64
准备中...                          ################################# [100%]
正在清理/删除...
   1:mysql-community-server-5.7.39-1.e################################# [ 25%]
   2:mysql-community-client-5.7.39-1.e################################# [ 50%]
   3:mysql-community-libs-5.7.39-1.el7################################# [ 75%]
   4:mysql-community-common-5.7.39-1.e################################# [100%]

删除安装mysq产生的目录

[root@mysql2 install]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/var/lib/mysql
/var/lib/mysql/mysql
/usr/share/mysql
[root@mysql2 install]# rm -rf /var/lib/mysql /etc/selinux/targeted/active/modules/100/mysql/ /usr/share/mysql/

删除mysql用户及用户组

[root@mysql2 install]# userdel -r mysql
[root@mysql2 install]# groupdel mysql

3.3 二进制安装mysql

3.3.1 安装mysql规范

首先我们mysql创建用户规范,mysql:用户建议虚拟用户,只用于mysql进程运行使用,不允许登录、不创建家目录。

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

3.3.2 解压上传服务器的rpm包

安装包下载参考本文章 2.2章节
如服务器有外网的情况下可以使用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

上传mysql二进制包

[root@mysql2 install]# rz

在这里插入图片描述

解压二进制包

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

3.3.3 安装mysql

创建用户

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

创建目录

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

更改用户和组

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

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

[root@mysql2 install]# mkdir -p /opt/mysql
[root@mysql2 install]# mv 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

[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
log_bin=/data/mysql/my3306/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/my3306/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
EOF

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

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

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

配置环境变量

[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
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  7562 mysql   23u  IPv6  97311      0t0  TCP *:mysql (LISTEN)

重置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: 
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.39-log MySQL Community Server (GPL)

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

授权root远程登陆的权限

mysql> grant all privileges on *.*  to  'root'@'%'  identified by 'Cjlr2023!'  with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

远程登陆测试

在这里插入图片描述
停止mysql

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

3.3.4 使用service控制mysql启动或关闭

修改46、47、207、266行如下

[root@mysql2 support-files]# vim /usr/local/mysql/support-files/mysql.server

46 basedir=/usr/local/mysql #软件位置
47 datadir=/data/mysql/my3306/data #数据目录
207  conf=/data/mysql/my3306/my3306.cnf #参数文件
266  $bindir/mysqld_safe --datadir="$datadir" --socket=/data/mysql/my3306/mysql.sock --pid-file="$mysqld_pid_file_path" $other_args >/dev/nu    ll & #添加socket文件位置
[root@mysql2 support-files]# ./mysql.server 
Usage: mysql.server  {start|stop|restart|reload|force-reload|status}  [ MySQL server options ]
[root@mysql2 support-files]# ./mysql.server stop
Shutting down MySQL.. SUCCESS! 
[root@mysql2 support-files]# ./mysql.server start
Starting MySQL. SUCCESS! 
[root@mysql2 support-files]# ./mysql.server status
 SUCCESS! MySQL running (3807)
[root@mysql2 support-files]# ./mysql.server reload
 SUCCESS! Reloading service MySQL

添加到mysqld到service

[root@mysql2 support-files]# cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld
[root@mysql2 support-files]# chkconfig /etc/init.d/mysqld on
[root@mysql2 support-files]# chkconfig mysqld --list

注:该输出结果只显示 SysV 服务,并不包含
原生 systemd 服务。SysV 配置数据
可能被原生 systemd 配置覆盖。 

      要列出 systemd 服务,请执行 'systemctl list-unit-files'。
      查看在具体 target 启用的服务请执行
      'systemctl list-dependencies [target]'。

mysqld         	0:关	1:关	2:开	3:开	4:开	5:开	6:关
[root@mysql2 support-files]# service mysqld stop
Shutting down MySQL.. SUCCESS! 
[root@mysql2 support-files]# service mysqld start
Starting MySQL. SUCCESS! 
[root@mysql2 support-files]# service mysqld status
 SUCCESS! MySQL running (4080)

3.3.5 卸载mysql

查询数据库状态

[root@mysql2 ~]# lsof -i:3306
COMMAND  PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  4080 mysql   29u  IPv6  40197      0t0  TCP *:mysql (LISTEN)

关闭数据库

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

如果配置了使用service控制mysql启动或关闭,删除service服务和脚本

[root@mysql2 ~]# chkconfig --del mysqld
[root@mysql2 ~]# rm -rf /etc/init.d/mysqld

删除软件目录

[root@mysql2 ~]# rm -rf /opt/mysql/
[root@mysql2 ~]# rm -rf /usr/local/mysql 

删除数据目录

[root@mysql2 ~]# rm -rf /data/mysql/

删除mysql所有的目录

[root@mysql2 ~]# find / -name mysql
/run/lock/subsys/mysql
/var/spool/mail/mysql
[root@mysql2 ~]# rm -rf /run/lock/subsys/mysql 
[root@mysql2 ~]# rm -rf /var/spool/mail/mysql

删除mysql用户及用户组

[root@mysql2 install]# userdel -r mysql
[root@mysql2 install]# groupdel mysql

3.4 源码安装mysql(了解)

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

3.4.1 安装依赖包

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

3.4.2 生成源码包

安装包下载参考本文章 2.2章节
如服务器有外网的情况下可以使用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

上传mysql二进制包

[root@mysql2 install]# rz

在这里插入图片描述

[root@mysql2 install]# rpm -ivh mysql-community-5.7.39-1.el7.src.rpm 
[root@mysql2 install]# ll ~/rpmbuild/SOURCES/
总用量 155596
-rw-r--r-- 1 root root 70389425 6月   8 2022 boost_1_59_0.tar.bz2
-rwxr-xr-x 1 root root      160 6月   8 2022 filter-provides.sh
-rwxr-xr-x 1 root root      176 6月   8 2022 filter-requires.sh
-rw-r--r-- 1 root root 32411131 6月   8 2022 mysql-5.6.51.tar.gz
-rw-r--r-- 1 root root 56517250 6月   8 2022 mysql-5.7.39.tar.gz

3.4.3 编译安装mysql

创建用户

[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
log_bin=/usr/local/mysql/data/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/usr/local/mysql/data/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
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密码在错误日志当中

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

连接mysql

[root@mysql2 mysql-5.7.39]# mysql -uroot -p123456
mysql: [Warning] Using a password on the command line interface can be insecure.
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 4
Server version: 5.7.39-log Source distribution

Copyright (c) 2000, 2022, Oracle and/or its affiliates.

Oracle is a registered trademark of Oracle Corporation and/or its
affiliates. Other names may be trademarks of their respective
owners.

Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

mysql> 

授权root远程登陆的权限

mysql> grant all privileges on *.*  to  'root'@'%'  identified by 'Cjlr2023!'  with grant option;
Query OK, 0 rows affected, 1 warning (0.01 sec)

mysql> flush privileges;
Query OK, 0 rows affected (0.01 sec)

远程登陆测试

在这里插入图片描述

3.4.4 卸载mysql

查询数据库状态

[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@mysql2 mysql-5.7.39]# kill -9 89895

删除所有安装目录

[root@mysql2 mysql-5.7.39]# find / -name mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/include/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/rapid/plugin/group_replication/include/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/rapid/plugin/group_replication/libmysqlgcs/include/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-api/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-bindings/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-bindings/src/main/resources/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-core/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-core/src/main/resources/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-jdbc/src/main/antlr3/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-jdbc/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-jdbc/src/main/resources/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-jpatest/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-openjpa/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-openjpa/src/main/resources/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-openjpa/src/test/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-tie/src/main/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-tie/src/main/resources/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/clusterj/clusterj-tie/src/test/java/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/nodejs/Adapter/impl/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/src/ndbjtie/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/src/ndbjtie/com/mysql/ndbjtie/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/src/ndbjtie/jtie/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/test/crund/schema_driven_load_unfinished/tws_java/src/com/mysql
/root/rpmbuild/SOURCES/mysql-5.7.39/storage/ndb/test/crund/src/com/mysql
/var/spool/mail/mysql
/usr/local/mysql
/usr/local/mysql/include/mysql
/usr/local/mysql/bin/mysql
/usr/local/mysql/data/mysql
[root@mysql2 mysql-5.7.39]# rm -rf /root/rpmbuild/ /var/spool/mail/mysql /usr/local/mysql
[root@mysql2 mysql-5.7.39]# find / -name mysql
[root@mysql2 mysql-5.7.39]# rm -rf /etc/my.cnf 

删除mysql用户及用户组

[root@mysql2 mysql-5.7.39]# userdel -r mysql
[root@mysql2 mysql-5.7.39]# groupdel mysql

四、多实例部署

4.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%

4.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]# mv 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

[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
log_bin=/data/mysql/my3306/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/my3306/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
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
log_bin=/data/mysql/my3307/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/my3307/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
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  &
[1] 94286
[root@mysql2 install]# nohup: 忽略输入并把输出追加到"nohup.out"

[root@mysql2 install]# nohup mysqld --defaults-file=/data/mysql/my3307/my3307.cnf  &
[2] 94329
[root@mysql2 install]# nohup: 忽略输入并把输出追加到"nohup.out"

查看是否启动成功

[root@mysql2 install]# lsof -i:3306
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  94286 mysql   23u  IPv6 214546      0t0  TCP *:mysql (LISTEN)
[root@mysql2 install]# lsof -i:3307
COMMAND   PID  USER   FD   TYPE DEVICE SIZE/OFF NODE NAME
mysqld  94329 mysql   23u  IPv6 195569      0t0  TCP *:opsession-prxy (LISTEN)

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

连接

[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.3 和 3.3.5 章节

4.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]# mv 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

[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
log_bin=/data/mysql/my3306/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/my3306/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
[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
log_bin=/data/mysql/my3307/logs/mysql-bin
binlog_format=row
gtid_mode=on
enforce_gtid_consistency=true
log_slave_updates=1
max_connections=1024
wait_timeout=60
sort_buffer_size=2M
max_allowed_packet=32M
join_buffer_size=2M
innodb_buffer_pool_size=128M
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=32M
innodb_log_file_size=128M
innodb_log_files_in_group=2
binlog_cache_size=2M
max_binlog_cache_size=8M
max_binlog_size=512M
expire_logs_days=7
slow_query_log=on
slow_query_log_file=/data/mysql/my3307/logs/slow.log
long_query_time=0.5
log_queries_not_using_indexes=1
EOF

初始化实例

  • mysqld_multi启动的时候会自动初始化数据库

初始化所有实例

[root@mysql2 install]# mysqld_multi --defaults-extra-file=/etc/my_multi.cnf start
[root@mysql2 install]# lsof -i:3306
COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
mysqld  64896 mysql   23u  IPv6 1344184      0t0  TCP *:mysql (LISTEN)
[root@mysql2 install]# lsof -i:3307
COMMAND   PID  USER   FD   TYPE  DEVICE SIZE/OFF NODE NAME
mysqld  62029 mysql   23u  IPv6 1347838      0t0  TCP *:opsession-prxy (LISTEN)

在这里插入图片描述

初始化实例完成后,查询数据库没有启动,–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密码


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

连接

[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

4.4 使用service 控制实例的启停

修改脚本如下

[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

远程连接参考本文 3.3.3 章节

4.5 卸载mysql多实例

查询数据库状态

[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 --password=123456 --user=root stop

如果配置了使用service控制mysql启动或关闭,删除service服务和脚本

[root@mysql2 ~]# chkconfig --del mysqld
[root@mysql2 ~]# rm -rf /etc/init.d/mysqld

关闭数据库

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

如果配置了使用service控制mysql启动或关闭,删除service服务和脚本

[root@mysql2 ~]# chkconfig --del mysqld_multi 
[root@mysql2 ~]# rm -rf /etc/init.d/mysqld_multi 

清除所有mysql文件

[root@mysql2 ~]# find / -name mysql
/etc/selinux/targeted/active/modules/100/mysql
/var/spool/mail/mysql
/usr/lib64/mysql
/usr/local/mysql
/opt/mysql
/opt/mysql/mysql-5.7.39-linux-glibc2.12-x86_64/bin/mysql
/opt/mysql/mysql-5.7.39-linux-glibc2.12-x86_64/include/mysql
/data/mysql
/data/mysql/my3306/data/mysql
/data/mysql/my3307/data/mysql
/data/etc/selinux/targeted/active/modules/100/mysql
/date/selinux/targeted/active/modules/100/mysql
/date/etc/selinux/targeted/active/modules/100/mysql

删除查找出来文件,成功卸载mysql。

[root@mysql2 ~]# rm -rf /etc/selinux/targeted/active/modules/100/mysql/ /var/spool/mail/mysql /usr/lib64/mysql/ /usr/local/mysql/ /opt/mysql/ /data/mysql/ /date/selinux/targeted/active/modules/100/mysql
[root@mysql2 ~]# find / -name mysql

在这里插入图片描述

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/437196.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

OPNET Modeler 例程——ALOHA和CSMA的性能对比

文章目录 概述一、创建 ALOHA 协议模型二、创建 CSMA 协议模型三、创建收信机进程和节点模型四、创建总线型链路模型五、创建网络模型六、查看仿真结果总结 概述 本例程以以太网为例论述总线型网络的建模方法&#xff0c;对数据链路层的 MAC 技术进行建模分析&#xff0c;并进…

【多线程】常见的锁策略

✨个人主页&#xff1a;bit me&#x1f447; ✨当前专栏&#xff1a;Java EE初阶&#x1f447; ✨每日一语&#xff1a;老当益壮&#xff0c;宁移白首之心&#xff1b;穷且益坚&#xff0c;不坠青云之志。 目 录 &#x1f3f3;️一. 乐观锁 vs 悲观锁&#x1f3f4;二. 普通的互…

【数据分析之道-NumPy(七)】numpy字符串函数

文章目录 专栏导读1、函数说明2、add()函数3、multiply()函数4、center()函数5、capitalize()函数6、title()函数7、lower()函数8、upper()函数9、split()函数10、splitlines()函数11、strip()函数12、join()函数 专栏导读 ✍ 作者简介&#xff1a;i阿极&#xff0c;CSDN Pytho…

2023-04-16 学习记录--C/C++-邂逅C/C++

一、固定格式 ⭐️ stdio的理解: abbr.标准输入输出&#xff08;standard input/output&#xff09;。 #include <stdio.h> int main() {... // 表达式return 0; }二、printf语句&#xff08;输出语句&#xff09; ⭐️ &#xff08;一&#xff09;、前提【重要】 注意&a…

小程序组件化开发

前言 随着小程序的普及&#xff0c;越来越多的开发者开始使用小程序进行开发&#xff0c;而小程序的组件化开发已经成为了一种标配的开发模式。本文将深入介绍小程序组件化开发的相关知识&#xff0c;包括组件的定义、生命周期、通信和使用等方面&#xff0c;帮助大家更好地理解…

小程序WebSocket详解

1&#xff0c;什么是WebSocket&#xff1f; WebSocket是一种用于在Web浏览器和服务器之间进行双向通信的协议&#xff0c;而小程序WebSocket是在小程序中使用WebSocket协议进行双向数据通信的一种技术。它可以在单个TCP连接上进行全双工通信&#xff0c;实现实时、高效的数据通…

cesium加载geoserver发布的mvt服务

cesium 本身并不支持矢量切片的加载&#xff0c;所以需要借助其他工具进行解析。在Canvas中把矢量瓦片绘制好了&#xff0c;以图片形式像WMTS一样向Cesium提供图片服务就行了&#xff0c;当然也可以采用中间件的形式在后台把服务渲染好再以服务形式提供给前端。 方法1&#xf…

第八回:如何使用Stack Widget

文章目录 概念介绍使用方法示例代码 我们在上一章回中介绍了GirdView Widget,本章回中将介绍 Stack这种Widget&#xff0c;闲话休提&#xff0c;让我们一起Talk Flutter吧。 概念介绍 在Flutter中Stack主要用来叠加显示其它的Widget&#xff0c;类似我们日常生活中的楼层或者…

【Unity3D】魔方

1 需求实现 绘制魔方 中基于OpenGL ES 实现了魔方的绘制&#xff0c;实现较复杂&#xff0c;本文基于 Unity3D 实现了 2 ~ 10 阶魔方的整体旋转和局部旋转&#xff0c;详细需求如下&#xff1a; 用户通过选择魔方阶数&#xff0c;渲染指定阶数的魔方&#xff0c;并且可以自动打…

强化学习原理及应用作业之动态规划算法【SYSU_2023SpringRL】

强化学习原理及应用作业之动态规划算法【SYSU_2023SpringRL】 题目描述:任务一:动态规划方法一、策略迭代算法1、代码2、结果3、思路讲解策略评估策略提升二、价值迭代算法1、代码2、结果3、思路讲解算法整个流程总结题目描述: 本次实践作业将在以下环境进行: 该环境由一…

doris学习之路(一)初识Doris

Apache Doris 是一个基于 MPP 架构的高性能、实时的分析型数据库&#xff0c;以极速易用的特点被人们所熟知&#xff0c;仅需亚秒级响应时间即可返回海量数据下的查询结果&#xff0c;不仅可以支持高并发的点查询场景&#xff0c;也能支持高吞吐的复杂分析场景。基于此&#xf…

win10+Ubuntu双系统安装教程

1、下载Ubuntu镜像文件 Ubuntu各个版本的安装镜像文件可以从华为云下载&#xff1a; http://repo.huaweicloud.com/ubuntu-releases/ Ubuntu桌面版的安装镜像文件名为&#xff1a;ubuntu-<版本号>-desktop-amd64.iso 2、下载安装镜像工具 用win32diskImage 网址为Win…

初始c++语法

我们在C语言的基础之上进行c语言的学习。对于我们的c语言来说&#xff0c;c兼容C语言&#xff0c;所以我们以前编写的C语言的程序在c平台上也是可以运行的。唯一不同的就是我们的c对于我们C语言的部分语法做出了优化以及引入了面向对象的概念。所以在刚开始学习c的时候我们可以…

真题详解(归并)-软件设计(五十三)

真题详解&#xff08;UML部署图&#xff09;-软件设计&#xff08;五十二)https://blog.csdn.net/ke1ying/article/details/130233656 语句覆盖<判定覆盖<条件覆盖<路径覆盖。 2、ISO/IEC 9126软件质量模型中对软件质量定义&#xff1a; 易测试性、易分析性、稳定性、…

【FPGA-Spirit_V2】基于FPGA的循迹小车-小精灵V2开发板

&#x1f389;欢迎来到FPGA专栏~基于FPGA的循迹小车 ☆* o(≧▽≦)o *☆嗨~我是小夏与酒&#x1f379; ✨博客主页&#xff1a;小夏与酒的博客 &#x1f388;该系列文章专栏&#xff1a;FPGA学习之旅 文章作者技术和水平有限&#xff0c;如果文中出现错误&#xff0c;希望大家能…

Contrastive Representation Learning 对比表征学习(二)关键成分

原文翻译自这里 关键成分 大量数据增强 给定一训练样本&#xff0c;在计算其相关损失之前通常需要数据增强技术为该样本添加噪声。适度的数据增强设定对于学习一个优秀的&#xff0c;泛化性好的嵌入特征是至关重要的。其在不改变语义信息的同时将些微变量引入到样本之中&…

Windows环境下实现设计模式——备忘录模式(JAVA版)

我是荔园微风&#xff0c;作为一名在IT界整整25年的老兵&#xff0c;今天总结一下Windows环境下如何编程实现备忘录模式&#xff08;设计模式&#xff09;。 不知道大家有没有这样的感觉&#xff0c;看了一大堆编程和设计模式的书&#xff0c;却还是很难理解设计模式&#xff…

【使用ChatGPT自动化】批量转换.csv文件为.xlsx文件

第1次提问&#xff1a; 我&#xff1a;我想使用Python批量转换.csv文件为.xlsx文件&#xff0c;请你提供代码 它&#xff1a;好的&#xff0c;以下是使用Python批量转换.csv文件为.xlsx文件的代码&#xff1a; import os import glob import pandas as pddef csv_to_xlsx(pa…

MATLAB数值运算(六)

目录 实验目的 实验内容 原创代码&#xff0c;仅供参考&#xff0c;不要直接CV呀 ~_~ 实验目的 1&#xff09;掌握定义符号对象和创建符号表达式的方法&#xff1b; 2&#xff09;掌握符号运算基本命令和规则&#xff1b; 3&#xff09;掌握符号表达式的运算法则以及符号矩阵…

A100 Jeston TX1TX2使用教程-接口说明

EdgeBox_Umate_A100是一款嵌入式人工智能计算机&#xff0c;能够为各类终端设备赋予人工智能的能力&#xff0c;降低终端智能的开发门槛。EdgeBox_Umate_A100搭载了移动处理器——NVIDIA Jetson TX1&#xff0c;并且兼容TX2&#xff0c;是最适合边缘计算的高性能平台。 A100 算…