本文主要是介绍MySQL多实例管理如何在一台主机上运行多个mysql,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!
《MySQL多实例管理如何在一台主机上运行多个mysql》文章详解了在Linux主机上通过二进制方式安装MySQL多实例的步骤,涵盖端口配置、数据目录准备、初始化与启动流程,以及排错方法,适用于构建读...
一、什么是MySQL多实例
多实例,就是在一台linux主机上运行多个MySQL,节约计算资源,区别在于不同的端口。
例如 # 数据库实例1 /my_mysql/3306/ #目录 /my_mysql/3306/data #数据文件夹 /my_mysql/3306/my.cnf #配置文件 /my_mysql/3306/mysqld #启动脚本 # 数据库实例2 /my_mysql/3307/data /my_mysql/3307/my.cnf /my_mysql/3307/mysqld # 不同的应用程序,读取不同的mysql实例
大型企业读写分离架构:
基于—个mysql应用,初始化三次,生成3个独立的mysql数据目录,即为三个mysql独立的实例
二、二进制方式安装MySQL
1.获取二进制代码包
wget https://cdn.mysql.com/archives/mysql-5.6/mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz
2.安装基础依赖
yum install ncurses-devel libaio-devel gcc make cmake -y
3.清空原安装内容(没有可忽略)
前面编译安装时已经启动MySQL,所以现在要先将它停掉(没有编译安装的可忽略);
清空之前编译安装mysql,配置的环境的清理,清空PATH有关的mysql。
#进入文件 vim /etc/profile #将以下这行注释掉 export PATH=/application/mysql/bin:$PATH #停止当前linux的mysql,(如果存在mysql端口的话) [root@mysql-01 tools]# /etc/init.d/mysqld stop Shutting down MySQL.. SUCCESS!
4.创建mysql用户
# 这里无须重新创建 [root@mysql-01 tools]# id mysql uid=1000(mysql) gid=1000(mysql) 组=1000(mysql) [root@mysql-01 tools]# # 没有创建mysql用户的需要创建
准备好mysql多实例的数据目录
mkdir -p /my_mysql/{3306,3307} [root@mysql-01 tools]# tree /my_mysql/ /my_mysql/ ├── 3306 └── 3307 2 directories, 0 files
5.解压缩二进制的mysql软件包
# -C 指定目录解压缩 [root@mysql-01 tools]# tar -zxvf mysql-5.6.40-linux-glibc2.12-x86_64.tar.gz -C /application #解压完成 [root@mysql-01 tools]# cd /application/ [root@mysql-01 application]# ls -lth 总用量 0 # 刚才解压缩的二进制mysql安装目录 drwxr-xr-x 13 root root 191 7月 3 11:15 mysql-5.6.40-linux-glibc2.12-x86_64 #编译安装生成的mysql安装目录 drwxr-xr-x 14 mysql mysql 216 7月 2 16:36 mysql-5.6.40 # —个简单的软连接 lrwxrwxrwx 1 root root 26 7月 2 16:13 mysql -> /application/mysql-5.6.40/
6.准备二进制mysql运行所需的环境
准备mysql多实例的,各个配置文件
3306
3307
准备各个启停管理脚本
数据初始化,生成mysql的初始化data数据
三、准备多实例配置文件
#看好路径 [root@mysql-01 mysql-5.6.40-linux-glibc2.12-x86_64]# pwd /application/mysql-5.6.40-linux-glibc2.12-x86_64 [root@mysql-01 mysql-5.6.40-linux-glibc2.12-x86_64]# cd /my_mysql/ [root@mysql-01 my_mysql]# cd 3306 [root@mysql-01 3306]# pwd /my_mysql/3306
3306实例的配置文件
#创建文件 vim my.cnf
[client] [mysqld] port=3306 sockeChina编程t=/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的配置文件
#注意修改如下参数 #3306换成3307;server-id不能和3306实例重复 [root@mysql-01 3306]# cd ../3307 [root@mysql-01 3307]# vim my.cnf
[client] [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 得区别开,需自行手动修改
[root@mysql-01 3307]# cd ../3306 [root@mysql-01 3306]# vim mysql_3306
将以下内容粘贴进去
#!/bin/bash # MySQL服务管理脚本 port=3306 mysql_user="mysqlIXfSgl" 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 "Stopping 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: /data/${port}/mysql {start|stop|restart}\n" exit 1 ;; esac
#赋予权限 [root@mysql-01 3306]# chmod +x mysql_3306
五、MySQL(3307启停脚本)
跟上面操作类似
cd ../3307 vim mysql_3307
#!/bin/bash # MySQL服务管理脚本 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 "Stopping 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: /data/${port}/mysql {start|stop|restart}\n" exit 1 ;; esac
#赋权 chmod +x mysql_3307
六、用户、组授权
降低权限,全部赋予给mysql
[root@mysql-01 3307]# chown -R mysql.mysql /my_mysql/
七、PATH配置
[root@mysql-01 ~]# vim /etc/profile [root@mysql-01 ~]# tail -1 /etc/profile export PATH=/application/mysql-5.6.40-linux-glibc2.12-x86_64/bin:$PATH [root@mysql-01 ~]# source /etc/profile [root@mysql-01 ~]# echo $PATH /application/mysql-5.6.40-linux-glibc2.12-x86_64/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin [root@mysql-01 ~]# which mysql /application/mysql-5.6.40-linux-glibc2.12-x86_64/bin/mysql
八、创建多个实例对应的数据目录
分别创建 3306 3307 两个实例的数据目录
mkdir js-p /my_mysql/3307/data mkdir -p /my_mysql/3306/data
查看一下
[root@mysql-01 ~]# tree /my_mysql /my_mysql ├── 3306 │ ├── my.cnf │ └── mysql_3306 └── 3307 ├── data ├── my.cnf └── mysql_3307 3 directories, 4 files
九、MySQL多实例初始化
先初始化3306的数据
ls /my_mysql/3306/data/ # 此时3306的data文件夹是空的,没有数据
执行初始化,生成mysql运行所需的初始数据
sudo /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
出现2个ok后,表示正常
此时会正确生成mysql的初始数据
[root@mysql-01 ~]# ls -l /my_mysql/3306/data 总用量 110600 -rw-rw---- 1 mysql mysql 12582912 7月 3 15:36 ibdata1 -rw-rw---- 1 mysql mysql 50331648 7月 3 15:36 ib_logfile0 -rw-rw---- 1 mysql mysql 50331648 7月 3 15:36 ib_logfile1 drwx------ 2 mysql mysql 4096 7月 3 15:36 mysql drwx------ 2 mysql mysql 4096 7月 3 15:36 performance_schema drwx------ 2 mysql mysql 6 7月 3 15:36 test
同样,生成3307数据
sudo /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
跟上面相类似,出现两个OK表示初始化成功;
同样可以通过ls命令查看,这里不多赘述。
十、分别启动MySQL多实例
创建mysql的错误日志文件
touch /my_mysql/3306/mysql_3306_error.log touch /my_mysql/3307/mysql_3307_error.log # 以及对整个mysql目录再次授权 chown -R mysql.mysql /my_mysql/
确保当前没有其他mysql
netstat -tunlp |grep mysql
启动3306数据库
[root@mysql-01 ~]# /my_myChina编程sql/3306/mysql_3306 start Starting MySQL... [root@mysql-01 ~]# # 用如下命令登录,使用sock套接字文件登录 mysql -S /my_mysql/3306/mysql.sock
同样,3307数据库也用以上相同方式创建,注意修改端口号即可;
至此,MySQL多实例分别启动完成。
另,可以自行在3306或3307其中一个里面通过create database xxx;创建一个数据库,然后根据show databases;查看来验证是否多实例启动成功。
再另,启动mysql的排错流程
准备配置文件是否有误
准备启停脚本 授权
权
chown -R mysql.mysql /my_mysql/
确保当前没有其他mysql ```bash netstat -tunlp |grep mysql
启动3306数据库
[root@mysql-01 ~]# /my_mysql/3306/mysql_3306 start Starting MySQL... [root@mysql-01 ~]# # 用如下命令登录,使用sock套接字文件登录 mysql -S /my_mysql/3306/mysql.sock
同样,3307数据库也用以上相同方式创建,注意修改端口号即可;
至此,MySQL多实例分别启动完成。
另,可以自行在3306或3307其中一个里面通过create database xxx;创建一个数据库,然后根据show databases;查看来验证是否多实例启动成功。
再另,启动mysql的排错流程
准备配置文件是否有误
准备启停脚本 授权
数据目录初始化
到此这篇关于MySQL多实例管理---在一台主机上运行多个mysql的文章就介绍到这了,更多相关mysql 运行多个mysql内容请搜索China编程(www.chinasem.cn)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程China编程(www.chinasem.cn)!
这篇关于MySQL多实例管理如何在一台主机上运行多个mysql的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!