MySQL的多实例
2022/9/9 2:23:09
本文主要是介绍MySQL的多实例,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
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]#
这篇关于MySQL的多实例的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-16MySQL资料:新手入门教程
- 2024-11-15MySQL教程:初学者必备的MySQL数据库入门指南
- 2024-11-15MySQL教程:初学者必看的MySQL入门指南
- 2024-11-04部署MySQL集群项目实战:新手入门教程
- 2024-11-04如何部署MySQL集群资料:新手入门指南
- 2024-11-02MySQL集群项目实战:新手入门指南
- 2024-11-02初学者指南:部署MySQL集群资料
- 2024-11-01部署MySQL集群教程:新手入门指南
- 2024-11-01如何部署MySQL集群:新手入门教程