开发者

MySQL多实例管理如何在一台主机上运行多个mysql

目录
  • 一、什么是mysql多实例
  • 二、二进制方式安装MySQL
    • 1.获取二进制代码包
    • 2.安装基础依赖
    • 3.清空原安装内容(没有可忽略)
    • 4.创建mysql用户
    • 5.解压缩二进制的mysql软件包
    • 6.准备二进制mysql运行所需的环境
  • 三、准备多实例配置文件
    • 四、MySQL(3306端口)启停脚本
      • 五、MySQL(3307启停脚本)
        • 六、用户、组授权
          • 七、PATH配置
            • 八、创建多个实例对应的数据目录
              • 九、MySQL多实例初始化
                • 十、分别启动MySQL多实例

                  一、什么是MySQL多实例

                  多实例,就是在一台linux主机上运行多个MySQL,节约计算资源,区别在于不同的端口。

                  MySQL多实例管理如何在一台主机上运行多个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多实例管理如何在一台主机上运行多个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多实例管理如何在一台主机上运行多个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
                  socke编程客栈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多实例管理如何在一台主机上运行多个mysql

                  此时会正确生成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_my编程客栈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内容请搜索编程客栈(www.devze.com)以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程客栈(www.devze.com)!

                  0

                  上一篇:

                  下一篇:

                  精彩评论

                  暂无评论...
                  验证码 换一张
                  取 消

                  最新数据库

                  数据库排行榜