首页 > 数据库 >MySQL多实例

MySQL多实例

时间:2023-08-05 16:23:50浏览次数:37  
标签:MySQL pid 实例 mysqld mysql 3306 3307 my

MySQL多实例

介绍

应用场景

资金紧张公司

若公司资金紧张,公司业务访问量不太大,但又希望不同业务的数据库服务各自能够尽量独立地提供服务而互相不受影响,或者,还有需要主从复制等技术提供备份或读写分离服务的需求,那么,多实例就再好不过了。

用户并发访问量不大的业务
当公司业务访问量不太大的时候,服务器的资源基本上都是浪费的,这时就很适合多实例的应用,如果对SQL语句的优化做得比较好,MySQL多实例会是一个很值得使用的技术,即使并发很大,合理分配好系统资源以及搭配好服务,也不会有太大的问题。

大公司使用mysql读写分离

采用形式:

每个实例都有单独的配置文件启动脚本数据目录

部署MySQL多实例

二进制安装

mysql官网下载

获取二进制代码包
wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz

安装mysql运行所需的基础依赖
yum install ncurses-devel libaio-devel gcc make cmake -y

停止mysql服务
/etc/init.d/mysqld stop

环境清理 清空PATH有关的mysql 注释掉之前的$PATH
#export PATH=/application/mysql/bin:$PATH

退出登录
[root@localhost ~]# logout
[root@localhost ~]# mysql
-bash: mysql: 未找到命令

创建用户
useradd -s /sbin/nologin -M mysql

准备好多实例的目录
mkdir -p /my_mysql/{3306,3307}

二进制安装比源代码编译安装省去了很多步骤 解压好之后bin目录中文件自动生成 
缺点就是编译安装包30m 二进制包300m
进入二进制包存在的目录 解压文件  -C 指定目录解压缩
tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /application/

准备二进制mysql运行所需要的环境

准备3306实例的my.cnf

cd /my_mysql/3306
vim my.cnf

[client]
port=3306
socket=/my_mysql/3306/mysql.sock

[mysqld]
port=3306
socket=/my_mysql/3306/mysql.sock
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64
datadir=/my_mysql/3306/data
log-bin=/my_mysql/3306/mysql-bin
server-id=1	

[mysqld_safe]
log-error=/my_mysql/3306/mysql_3306_error.log
pid-file=/my_mysql/3306/mysqld_3306.pid

准备3307实例的my.cnf

[client]
port=3307
socket=/my_mysql/3307/mysql.sock

[mysqld]
port=3307
socket=/my_mysql/3307/mysql.sock
basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64
datadir=/my_mysql/3307/data
log-bin=/my_mysql/3307/mysql-bin
server-id=2	

[mysqld_safe]
log-error=/my_mysql/3307/mysql_3307_error.log
pid-file=/my_mysql/3307/mysqld_3307.pid

mysql启停脚本

注意 3306和3307 这两个实例,配置文件也得区分开来

3306/mysqld_3306

port=3306
mysql_user="mysql"
    Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid

start(){
        if [ ! -e "$mysql_sock" ];then
                printf "Starting MySQL...\n"
                /bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
                sleep 3
        else
                printf "MySQL is running...\n"
                exit 1
        fi
}

stop(){
        if [ ! -e "$mysql_sock" ];then
                printf "MySQL is stopped...\n"
                exit 1
        else
                printf "Stoping MySQL...\n"
                mysqld_pid=`cat "$mysqld_pid_file_path"`
        if(kill -0 $mysqld_pid 2 > /dev/null)
                then
                kill $mysqld_pid
                sleep 2
                fi
        fi
}

restart(){
        printf "Restarting MySQL...\n"
        stop
        sleep 2
        start
}

case "$1" in
start)
        start
;;
stop)
        stop
;;
restart)
        restart
;;
*)
        printf"Usage:/my_mysql/${port}/mysql{start|stop|restart}\n"
esac
chmod +x mysql_3306

3307/mysqld_3307

port=3307
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/"
mysql_sock="/my_mysql/${port}/mysql.sock"
mysqld_pid_file_path=/my_mysql/${port}/mysqld_${port}.pid

start(){
        if [ ! -e "$mysql_sock" ];then
                printf "Starting MySQL...\n"
                /bin/sh ${Cmdpath}/mysqld_safe --defaults-file=/my_mysql/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null &
                sleep 3
        else
                printf "MySQL is running...\n"
                exit 1
        fi
}

stop(){
        if [ ! -e "$mysql_sock" ];then
                printf "MySQL is stopped...\n"
                exit 1
        else
                printf "Stoping MySQL...\n"
                mysqld_pid=`cat "$mysqld_pid_file_path"`
        if(kill -0 $mysqld_pid 2 > /dev/null)
                then
                kill $mysqld_pid
                sleep 2
                fi
        fi
}

restart(){
        printf "Restarting MySQL...\n"
        stop
        sleep 2
        start
}

case "$1" in
start)
        start
;;
stop)
        stop
;;
restart)
        restart
;;
*)
        printf"Usage:/my_mysql/${port}/mysql{start|stop|restart}\n"
esac
chmod +x mysql_3307

用户、组授权

降低权限,全部赋予给mysql

chown -R mysql.mysql /my_mysql/

path配置

vim /etc/profile
export PATH=/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin:$PATH

保存退出
source /etc/profile

创建多个实例对应的数据目录

mkdir -p /my_mysql/3306/data

mkdir -p /my_mysql/3307/data

见证mysql的多实例初始化

先初始化3306的数据 (出现两个ok)

/application/mysql-5.6.40-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf --basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data --user=mysql

初始化3307的数据 (出现两个ok)

/application/mysql-5.6.40-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3307/my.cnf --basedir=/application/mysql-5.6.40-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3307/data --user=mysql

创建错误日志

touch /my_mysql/3306/mysql_3306_error.log
touch /my_mysql/3306/mysql_3307_error.log

启动3306mysql 套接字登录

/my_mysql/3306/mysqld_3306 start

套接字登录mysql

mysql -S /my_mysql/3306/mysql.sock

启动3307mysql 套接字登录

/my_mysql/3307/mysqld_3306 start

套接字登录mysql

mysql -S /my_mysql/3307/mysql.sock
netstat -tunlp | grep mysql
可以看到两个数据库启动了

标签:MySQL,pid,实例,mysqld,mysql,3306,3307,my
From: https://www.cnblogs.com/xuxuxuxuxu/p/17608075.html

相关文章

  • 数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践
    数据库迁移系列】从MySQL到openGauss的数据库对象迁移实践原创酷哥[openGauss](javascript:void(0);)2022-11-0718:03发表于广东9月30日新发布的openGauss3.1.0版本,工具的全量迁移和增量迁移的性能不但有了全面提升,而且支持数据库对象视图、触发器、自定义函数、存储过程的......
  • Docker-Compose 一键部署mysql及初始化sql脚本
    1.部署前提:服务器具备docker和docker-compose环境2.镜像准备:-mysql:DockerFile文件:FROMmysql:5.7.41COPY*.sql/docker-entrypoint-initdb.d/初始化sql脚本xxx.sql放在DockerFile文件同级目录下执行指令:dockerbuild-fdockerfile_mysql-tmysql:1.0.0.......
  • MySql之锁
    MySql之锁一、全局锁对整个数据库加锁应用:数据库所有表备份二、表级锁1.表锁分为两类:表共享读锁readlock表独占写锁writelock2.元数据锁避免DML语句和DDL语句的冲突问题3.意向锁:作用:针对行锁和表锁,当表中有行锁时,会同时加一把意向锁,表锁不用去逐行遍历是否加了行锁,......
  • 最简单的Qt连接MYSQL的方法
    最简单的Qt连接MYSQL的方法⭐当我试图在项目中连接本地的mysql时,反复出现:QMYSQLdrivernotloaded,显示没有成功加载mysql的驱动,在网上查询了很多教程和视频,大多为互相转载且老旧,耗费了大半天还是没有构建成功,通常的解决方法是在本地构建mysql驱动(通过安装qt时勾选的src选项里......
  • MySQL之InnoDB存储结构 转载 https://juejin.cn/post/7253816086679846972
    1InnoDB存储引擎InnoDB存储引擎最早由InnobaseOy公司开发(属第三方存储引擎)。从MySQL5.5版本开始作为表的默认存储引擎。该存储引擎是第一个完整支持ACID事务的MySQL存储引擎,特点是行锁设计、支持MVCC、支持外键、提供一致性非锁定读,非常适合OLTP场景的应用使用。目前也是应用......
  • MySQL查询排序和分页
    连接数据库mysql-hlocalhost-uroot-proot排序查询语法:select字段列表from表名orderby字段1排序方式1,字段3排序方式2,字段3排序方式3,....;ASC:升序(默认值)DESC降序注意:如果是多字段排序,当第一个字段值相同时,才会根据第二个字段进行排序。根据年龄对公司......
  • MySQL内存使用排查
    MySQL使用内存上升90%!在运维过程中50%的几率,会碰到这样的问题。算是比较普遍的现象。MySQL内存使用率过高,有诸多原因。普遍原因是使用不当,还有MySQL本身缺陷导致的。到底是哪方面的问题,那就需要一个一个进行排查。下面介绍排查思路:1.参数配置需要确认,内存是否设置合理MySQL内......
  • mysql 命令安装
    1.  mysql 下载安装好压缩文件,下面我们进入正题,少废话。09:39:112023-08-05先到mysql官方网站下载:https://dev.mysql.com/downloads/mysql/ 解压后为这样 执行这个代码mysqld--initialize--console后面出现密码自己保存一下  然后继续安装m......
  • CentOS7 systemctl 管理MySQL服务
    #在/usr/lib/systemd/system/路径下创建mysql.service]#vim/usr/lib/systemd/system/mysql.service[Unit]Description=MySQLserverAfter=syslog.targetnetwork.target[Service]User=mysqlGroup=mysqlType=forkingTimeoutSec=0#PermissionsStartOnly=trueExecStar......
  • android mvvm实例解析
    MVVM架构,将整个应用分为三层,View层,VM层,Model层。其中View层单向引用VM层,VM层单向引用Model层。如上图。单向引用,而非双向引用,这是MVVM与MVP最大的区别。View层,只是单向引用VM层,VM层不需要引用View层,但是却可以更新View层。这是通过VM层的观察者模式实现的,在这里使用架构组件Liv......