ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

MySQL的多实例

2022-09-08 21:30:38  阅读:208  来源: 互联网

标签:my MySQL 实例 mysql 3306 3307 root localhost


MySQL的多实例

MySQL多实例与单实例的区别

单实例

一台linux中,一个mysql,一个进程,一个端口

多实例

一台linux中,多个mysql,多个进程,多个端口

#实例1
/usr/local/mysql/3306/my.cnf
/usr/local/mysql/3306/mysqld
/usr/local/mysql/3306/data

#实例2
/usr/local/mysql/3307/my.cnf
/usr/local/mysql/3307/mysqld
/usr/local/mysql/3307/data

MySQL多实例的部署

基于一个mysql应用

然后初始化三次,生成三个独立的mysql数据目录,即为三个实例

如何准备一个MySQL应用

让你安装一个MySQL

二进制方式安装MySQL

二进制安装MySQL

#二进制安装
wget https://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz
#安装依赖
yum -y install gcc gcc-c++ ncurses ncurses-devel bison cmake
#清除之前的环境
#清除mysq客户端的环境变量
#卸载之前的mysql以及停用mysql端口
[root@localhost ~]# vim /etc/profile
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin
[root@localhost ~]# 


#创建用户
useradd -M -s /sbin/nologin  mysql
id mysql
#准备好多实例mysql的安装目录
[root@localhost ~]# mkdir -p /my_mysql/{3306,3307}
[root@localhost ~]# tree /my_mysql/
bash: tree: 未找到命令...
[root@localhost ~]# yum -y install tree
[root@localhost ~]# tree /my_mysql/
/my_mysql/
├── 3306
└── 3307

2 directories, 0 files
[root@localhost ~]# 
#解压二进制文件

[root@localhost home]# tar -zxvf mysql-5.6.50-linux-glibc2.12-x86_64.tar.gz  -C /application/
#二进制安装目录,已经编译好的,有bin目录的
[root@localhost home]# ls -l /application/
总用量 0
drwxr-xr-x. 13 root root 191 8月  21 11:06 mysql-5.6.50-linux-glibc2.12-x86_64

准备二进制安装所需要的环境

  • 准备多个实例
    • 3306
    • 3307
  • 准备各个启动管理脚本
  • 数据初始化,生成mysql的初始化data数据

准备多个实例的配置文件

3306的实例的my.cnf

#这是配置客户端的,可以先不配置
[client]

#下面是配置服务端的,需要配置
[mysqld]
#使用的用户名启动
user=mysql
#默认的端口号码
port=3306
#指定进程套接字文件
socket=/my_mysql/3306/mysql.sock
#二进制安装的目录
basedir=/application/mysql-5.6.50-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
#进程id号
pid-file=/my_mysql/3306/mysqld_3306.pid


准备下面的实例配置可以用sed进行修改

#修改306变成3307
[root@localhost 3306]# sed  's/3306/3307/g' my.cnf >> /my_mysql/3307/my.cnf
[root@localhost 3306]# tree ../
../
├── 3306
│   └── my.cnf
└── 3307
    └── my.cnf
#修改server-id
[root@localhost 3306]# sed  -i  's/^server.*/server-id=2/g' /my_mysql/3307/my.cnf 

3307的实例的my.cnf

注意修改如下参数

第一个是,所有的3306换成3307

service-id一定不能和3306的实例重复

#这是配置客户端的,可以先不配置
[client]

#下面是配置服务端的,需要配置
[mysqld]
#使用的用户名启动
user=mysql
#默认的端口号码
port=3307
#指定进程套接字文件
socket=/my_mysql/3307/mysql.sock
#二进制安装的目录
basedir=/application/mysql-5.6.50-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
#进程id号
pid-file=/my_mysql/3307/mysqld_3307.pid

mysql_3306启停脚本

#!/bin/bash
port=3306
mysql_user="mysql"
Cmdpath="/application/mysql-5.6.50-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 --default-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 1z
fi
}
stop(){
	if [ ! -e "$mysql_sock" ] ;then
		printf "MySQL is stopped...\n"
		exit 1
	else
		prinitf "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

赋予权限

[root@localhost 3307]# chmod +x mysql_3307 
[root@localhost 3307]# ls -l 
总用量 8
-rw-r--r--. 1 root root 585 8月  21 12:15 my.cnf
-rwxr-xr-x. 1 root root 916 8月  21 12:40 mysql_3307
[root@localhost 3307]# chmod +x ../3306/mysql_3306 
[root@localhost 3307]# 

mysql_3307启停脚本

需要更改port就行

同时也要赋予权限

#!/bin/bash
port=3307
mysql_user="root"
Cmdpath="/application/mysql-5.6.50-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 --default-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 1z
fi
}
stop(){
	if [ ! -e "$mysql_sock" ] ;then
		printf "MySQL is stopped...\n"
		exit 1
	else
		prinitf "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

赋予执行权限

用户、用户组赋权

降低权限,赋予mysql权限

[root@localhost ~]# chown  -R mysql.mysql /my_mysql/
[root@localhost ~]# ls -l /my_mysql/3306/
总用量 8
-rw-r--r--. 1 mysql mysql 585 8月  21 12:14 my.cnf
-rwxr-xr-x. 1 mysql mysql 916 8月  21 12:38 mysql_3306
[root@localhost ~]# ls -l /my_mysql/
总用量 0
drwxr-xr-x. 2 mysql mysql 38 8月  21 12:38 3306
drwxr-xr-x. 2 mysql mysql 38 8月  21 12:40 3307
[root@localhost ~]# 

PATH配置

[root@localhost ~]# vim /etc/profile
[root@localhost ~]# tail -1 /etc/profile
export PATH=$PATH:/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin/
[root@localhost ~]# source /etc/profile
[root@localhost ~]# echo $PATH
/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/application/mysql-5.6.50-linux-glibc2.12-x86_64/bin/
[root@localhost ~]# 

创建多个实例的数据目录

分别创建3306和3307的数据目录

[root@localhost ~]# mkdir  /my_mysql/3307/data
[root@localhost ~]# mkdir  /my_mysql/3306/data
[root@localhost ~]# tree /my_mysql/
/my_mysql/
├── 3306
│   ├── data
│   ├── my.cnf
│   └── mysql_3306
└── 3307
    ├── data
    ├── my.cnf
    └── mysql_3307

4 directories, 4 files
[root@localhost ~]# 

创建之后需要重新赋予权限

[root@localhost ~]# ls -l /my_mysql/3306/
总用量 8
drwxr-xr-x. 2 root  root    6 8月  21 13:53 data
-rw-r--r--. 1 mysql mysql 585 8月  21 12:14 my.cnf
-rwxr-xr-x. 1 mysql mysql 916 8月  21 12:38 mysql_3306
[root@localhost ~]# chown  -R mysql.mysql /my_mysql/
[root@localhost ~]# ls -l /my_mysql/3306/
总用量 8
drwxr-xr-x. 2 mysql mysql   6 8月  21 13:53 data
-rw-r--r--. 1 mysql mysql 585 8月  21 12:14 my.cnf
-rwxr-xr-x. 1 mysql mysql 916 8月  21 12:38 mysql_3306
[root@localhost ~]# 

见证多实例化MySQL的初始化

先初始化3306的数据

#执行初始化,生成mysql运行所需要的数据
[root@localhost ~]# /application/mysql-5.6.50-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3306/my.cnf --basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3306/data/ --user=mysql
#两个OK之后运行成功
#此时会正常生成data数据
[root@localhost ~]# ls -l /my_mysql/3306/data/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 8月  21 14:04 ibdata1
-rw-rw----. 1 mysql mysql 50331648 8月  21 14:04 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 8月  21 14:00 ib_logfile1
drwx------. 2 mysql mysql     4096 8月  21 14:00 mysql
drwx------. 2 mysql mysql     4096 8月  21 14:04 performance_schema
drwx------. 2 mysql mysql        6 8月  21 14:00 test

在初始化3307的数据

#初始化之前是没有数据的
[root@localhost ~]# ls -l /my_mysql/3307/data/
总用量 0
#执行初始化,生成mysql运行所需要的数据
[root@localhost ~]# /application/mysql-5.6.50-linux-glibc2.12-x86_64/scripts/mysql_install_db --defaults-file=/my_mysql/3307/my.cnf --basedir=/application/mysql-5.6.50-linux-glibc2.12-x86_64/ --datadir=/my_mysql/3307/data/ --user=mysql
#两个OK之后运行成功
#此时会正常生成data数据
[root@localhost ~]# ls -l /my_mysql/3307/data/
总用量 110600
-rw-rw----. 1 mysql mysql 12582912 8月  21 14:06 ibdata1
-rw-rw----. 1 mysql mysql 50331648 8月  21 14:06 ib_logfile0
-rw-rw----. 1 mysql mysql 50331648 8月  21 14:06 ib_logfile1
drwx------. 2 mysql mysql     4096 8月  21 14:06 mysql
drwx------. 2 mysql mysql     4096 8月  21 14:06 performance_schema
drwx------. 2 mysql mysql        6 8月  21 14:06 test
[root@localhost ~]# 

分别启动mysql的实例

启动3306实例

#确保没有其他数据启动
[root@localhost ~]# netstat -antlp | grep mysql
[root@localhost ~]# 

#启动数据库(用启动脚本)
[root@localhost ~]# /my_mysql/3306/mysql_3306 start 
Starting Mysql....
/bin/sh: /applicationmysql-5.6.50-linux-glibc2.12-x86_64/bin/mysqld_safe: 没有那个文件或目录
[root@localhost ~]#
#报错,是由于启动脚本写目录少了“/”

翻车日记

指定的mysql的my.cnf使用路径有问题

  • 这里是由于在启动脚本中的default错了一定是--defaults-file=
  • 记得一定要s
[root@localhost 3306]# /my_mysql/3306/mysql_3306 start 
Starting Mysql....
Logging to '/usr/local/mysql/data/localhost.localdomain.err'.
[root@localhost 3306]# netstat -antlp |grep mysql
[root@localhost 3306]#

未创建错误日志的的文件也会报错

[root@localhost 3306]# ./mysql_3306 start 
Starting Mysql....
220821 15:07:20 mysqld_safe error: log-error set to '/my_mysql/3306/mysql_3306_error.log', however file don't exists. Create writable for user 'mysql'.
#创建完成之后就正常了
[root@localhost 3306]# touch ./mysql_3306_error.log
[root@localhost 3306]# ./mysql_3306 start 
Starting Mysql....
[root@localhost 3306]# 

报错总结

  • 首先查看my.cnf配置文件的问题
    • 查看pid、错误日志目录是否创建、查看basedir、datadir是否正确,权限是否正确
  • 查看启动脚本是否正确
  • 查看初始化脚本是否正确

在此,多实例配置启动完成

[root@localhost 3306]# netstat -antpu |grep mysql
tcp6       0      0 :::3306                 :::*                    LISTEN      3795/mysqld         
tcp6       0      0 :::3307                 :::*                    LISTEN      2974/mysqld         
[root@localhost 3306]# 

标签:my,MySQL,实例,mysql,3306,3307,root,localhost
来源: https://www.cnblogs.com/zheng520/p/16670918.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有