首页 > 数据库 >Mysql多实例安装

Mysql多实例安装

时间:2024-09-06 10:51:45浏览次数:11  
标签:配置文件 -- 安装 Mysql 实例 mysqld mysql data

MySQL多实例的本质
在一台机器上开启多个不同的MySQL实例,也就是各实例监听不同的端口,提供不同的服务。
多个实例公用一套MySQL安装程序,启动程序和配置文件可以是一个也可以是多个(推荐多个);各自的数据文件隔离;逻辑上各实例彼此隔离。

为什么要使用多实例?优缺点?

  • 物理机性能强大,单个实例无法充分利用硬件资源
  • 资源隔离,减少相互影响
  • 分担连接数,MySQL随着连接数的上升,性能会下降
  • 更充分的利用资源,不同业务错高峰混跑
  • 有优点,也有缺点,比如多个实例会存在资源相互抢占的问题,当某个实例的并发较高或者存在慢查询时,它会消耗更多的硬件资源,这就可能影响到别的实例的性能

多实例的应用场景

  • 资金比较紧张的公司
  • 并发访问不大的业务

MySQL多实例常见配置方案

  • (推荐)通过多个配置文件及多个启动程序来实现多实例。
  • 单一配置文件方案,即一个配置文件中写多个实例的配置。

 

1.目录规划

/opt/software/mysql   # MySQL的安装目录
/data/mysql/    # 所有的MySQL实例的数据目录、备份目录、日志目录,都在该目录下,各个实例以端口号命名
/etc/my.conf    # MySQL 3306实例的默认配置文件

 

2.依赖下载

# 如果你的系统曾经安装过mariadb,请先卸载
yum remove -y mariadb* 
yum install -y epel-release
yum update -y
yum install -y cmake gcc-c++ ncurses-devel perl-Data-Dumper boost-doc boost-devel libaio-devel
yum install -y net-tools tree bash-completion lrzsz

停止单实例的运行,并且备份单实例的配置文件(防止多实例初始化时读取这个单实例配置文件),后续多实例配置完事后,再重新还原这个配置文件

[root@cs software]# systemctl stop mysqld
[root@cs software]# mv /etc/my.cnf /etc/my.cnf.bak

准备多实例的数据目录
由于多实例的数据目录已经在单实例那里创建成功了,这一步就可以略过:
每台实例以端口命名,端口名目录下存放配置文件,其中的data目录存放各自的数据。

为每个实例创建配置文件
我们将每个实例(3306的可配置也可不配置,因为它默认使用的是/etc/my.cnf)的配置文件都放在各自端口目录的下面,视情况修改下面参数,然后直接拷贝运行即可:

cat > /data/mysql/3307/my.cnf <<EOF
[mysqld]
basedir=/opt/software/mysql
datadir=/data/mysql/3307/data
socket=/data/mysql/3307/mysql.sock
log-error=/data/mysql/3307/logs/errorlog/mysql.log
port=3307
server_id=7
[client]
socket=/data/mysql/3307/mysql.sock
EOF

cat > /data/mysql/3308/my.cnf <<EOF
[mysqld]
basedir=/opt/software/mysql
datadir=/data/mysql/3308/data
socket=/data/mysql/3308/mysql.sock
log-error=/data/mysql/3308/logs/errorlog/mysql.log
port=3308
server_id=8
[client]
socket=/data/mysql/3308/mysql.sock
EOF

cat > /data/mysql/3309/my.cnf <<EOF
[mysqld]
basedir=/opt/software/mysql
datadir=/data/mysql/3309/data
socket=/data/mysql/3309/mysql.sock
log-error=/data/mysql/3309/logs/errorlog/mysql.log
port=3309
server_id=9
[client]
socket=/data/mysql/3309/mysql.sock
EOF

cat > /data/mysql/3310/my.cnf <<EOF
[mysqld]
basedir=/opt/software/mysql
datadir=/data/mysql/3310/data
socket=/data/mysql/3310/mysql.sock
log-error=/data/mysql/3310/logs/errorlog/mysql.log
port=3310
server_id=10
[client]
socket=/data/mysql/3310/mysql.sock
EOF

完事之后,各自的数据目录下就有了配置文件了:

[root@cs software]# ls /data/mysql/3307/
backup  data  logs  my.cnf
[root@cs software]# cat /data/mysql/3307/my.cnf 
[mysqld]
basedir=/opt/software/mysql
datadir=/data/mysql/3307/data
socket=/data/mysql/3307/mysql.sock
log-error=/data/mysql/3307/logs/errorlog/mysql.log
port=3307
server_id=7
[client]
socket=/data/mysql/3307/mysql.sock

授权:

[root@cs software]# chown -R mysql.mysql /data/mysql/*

现在,配置文件完事了,就可以着手进行初始化了。

mysqld --initialize-insecure  --user=mysql --datadir=/data/mysql/3307/data --basedir=/opt/software/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/mysql/3308/data --basedir=/opt/software/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/mysql/3309/data --basedir=/opt/software/mysql
mysqld --initialize-insecure  --user=mysql --datadir=/data/mysql/3310/data --basedir=/opt/software/mysql

实际上,下面这几个配置文件内容都是来自于mysqld.service文件,然后修改了各自实例的配置文件路径:

cat  > /etc/systemd/system/mysqld3307.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/software/mysql/bin/mysqld --defaults-file=/data/mysql/3307/my.cnf
LimitNOFILE = 5000
EOF

cat  > /etc/systemd/system/mysqld3308.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/software/mysql/bin/mysqld --defaults-file=/data/mysql/3308/my.cnf
LimitNOFILE = 5000
EOF

cat  > /etc/systemd/system/mysqld3309.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/software/mysql/bin/mysqld --defaults-file=/data/mysql/3309/my.cnf
LimitNOFILE = 5000
EOF

cat  > /etc/systemd/system/mysqld3310.service <<EOF
[Unit]
Description=MySQL Server
Documentation=man:mysqld(8)
Documentation=http://dev.mysql.com/doc/refman/en/using-systemd.html
After=network.target
After=syslog.target
[Install]
WantedBy=multi-user.target
[Service]
User=mysql
Group=mysql
ExecStart=/opt/software/mysql/bin/mysqld --defaults-file=/data/mysql/3310/my.cnf
LimitNOFILE = 5000
EOF

多实例的配置基本完毕,可以尝试启动了:

systemctl start mysqld3307.service
systemctl start mysqld3308.service
systemctl start mysqld3309.service
systemctl start mysqld3310.service

# 下面两个命令等价
systemctl start mysqld3307.service
systemctl start mysqld3307

验证:

[root@cs software]# find / -name mysql.sock
/data/mysql/3307/mysql.sock
/data/mysql/3308/mysql.sock
/data/mysql/3309/mysql.sock
/data/mysql/3310/mysql.sock
[root@cs software]# netstat -lnp|grep 33
tcp6       0      0 :::3307                 :::*                    LISTEN      100746/mysqld       
tcp6       0      0 :::3308                 :::*                    LISTEN      100753/mysqld       
tcp6       0      0 :::3309                 :::*                    LISTEN      100760/mysqld       
tcp6       0      0 :::3310                 :::*                    LISTEN      100768/mysqld       
unix  2      [ ACC ]     STREAM     LISTENING     411727   100760/mysqld        /data/mysql/3309/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     411405   100746/mysqld        /data/mysql/3307/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     411408   100768/mysqld        /data/mysql/3310/mysql.sock
unix  2      [ ACC ]     STREAM     LISTENING     411730   100753/mysqld        /data/mysql/3308/mysql.sock

 

标签:配置文件,--,安装,Mysql,实例,mysqld,mysql,data
From: https://www.cnblogs.com/jjjyyylll/p/18399836

相关文章

  • Docker 安装mysql
    1、从docker hub上拉取镜像到本地#dockerpullmysql:5.62.如果是不加版本直接拉取的话,默认的是最新版本 #dockerpullmysql:latest默认拉取最新的版本3.启动:#dockerrun--namemysql-p3306:3306-eMYSQL_ROOT_PASSWORD="设置你的mysql的密码"-dmysql:5.6......
  • 安装Mysql
    1.下载Mysql打开官网下载地址:https://downloads.mysql.com/archives/community/,按照截图所示下载即可。选择对应的操作系统Windows安装 1.下载到本地的安装包是zip包,选择一个指定目录进行解压,解压的过程就是安装的过程,解压后的位置就是MySQL的安装位置。注意,安装目录不允许......
  • Typora v1.9.5 激活版详细安装方法 (轻便简洁的Markdown编辑器)
    安装步骤附链接:https://pan.xunlei.com/s/VO643khkh2f5HyCW3j6ljJP5A1?pwd=mrsr#1、下载解压后将Typora.exe发送到桌面快捷方式2、启动桌面图标3、使用成功......
  • 小皮出现80端口被System占用以及Mysql服务无法启动的解决方法
    80端口被System占用的解决方法80端口一般被当做网页服务器的默认端口,使用本机搭建服务器环境的时候,都会默认使用80端口来作为网页访问端,但是有的时候80端口会被其他程序占用,导致Apache启动失败。下面介绍一下如果80端口被占用后应该如何处理。经过查询,发现占用80端口的确是......
  • Adobe Dimension DN 激活版详细安装方法
    安装步骤Adobe-Dimension-4.0.2.4133-m0nkrus.zip:https://pan.xunlei.com/s/VO644eTTcjLPoTKym9V0ER1CA1?pwd=22dr#1、解压后点击如下图运行2、选择安装路径,我选择的是D盘,建议别安装在系统盘(C盘)3、安装中,耐心等待2-5分钟4、安装完成,点击关闭5、左下角点击开始菜单栏,找到......
  • 机器学习-AdaBoost实例
    以下是使用AdaBoost算法进行分类的一个简单例子,采用Python中的scikit-learn库。我们将使用经典的鸢尾花(Iris)数据集,并通过AdaBoost结合决策树分类器来进行分类。代码实现:#导入库fromsklearn.ensembleimportAdaBoostClassifierfromsklearn.treeimportDecis......
  • mysql索引优化
      1.联合索引,注意最左匹配原则:必须按照从左到右的顺序匹配,MySQL会一直向右匹配直到遇到范围查询(>、<、between、like)就停止匹配,比如a=1andb=2andc>3andd=4如果建立(a,b,c,d)顺序的索引,d是用不到索引的,如果建立(a,b,d,c)的索引则都可以用到,a,b,d的顺序可以任意......
  • 美团面试:mysql 索引失效?怎么解决? (重点知识,建议收藏,读10遍+)
    文章很长,且持续更新,建议收藏起来,慢慢读!疯狂创客圈总目录博客园版为您奉上珍贵的学习资源:免费赠送:《尼恩Java面试宝典》持续更新+史上最全+面试必备2000页+面试必备+大厂必备+涨薪必备免费赠送:《尼恩技术圣经+高并发系列PDF》,帮你实现技术自由,完成职业升级,薪......
  • 安装了跑神经网络的环境,所遇到的问题及解惑1
    cuda:12.2cudnn:8.9.7tensorflow库:2.17.0(python310_test){9:37}/home/code/python➭pythonmnist_test.py2024-09-0609:39:29.473128:Eexternal/local_xla/xla/stream_executor/cuda/cuda_dnn.cc:9261]UnabletoregistercuDNNfactory:Attemptingtoregister......
  • Python开发实例(30)文件搜索工具:创建一个程序,允许用户在指定目录下搜索文件
    创建一个文件搜索工具是一个非常有用的项目,它可以帮助用户在指定目录下查找文件。以下是一个基本的文件搜索工具示例,它使用Python的os库来进行文件搜索。importosdefsearch_files(directory,filename):found_files=[]forroot,_,filesinos.walk(director......