MySQL多实例搭建

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MySQL多实例搭建相关的知识,希望对你有一定的参考价值。

Centos7上实现多实例安装,就是一个服务上分别在3306、3307、3308多个端口上运行并且各用个的数据库,相当于是三个不同的程序;

1 安装程序包

        yum -y install mariadb-server

2 使用yum安装启动服务后默认会在/var/lib/mysql下生成数据库

        systemctl start mariadb
    ls /var/lib/mysql

3 /etc/my.cnf是默认的配置文件,当中定义了数据库的路径;sock的作用是用于本机通讯的

4 将三个实例的data,pid文件,配置文件,log文件,socket文件分别存放在不同的文件夹中,还要赋予权限

        mkdir /mysqldb/{3306,3307,3308}/{etc,log,data,socket,pid} -pv
    chown -R mysql.mysql /mysqldb

5 分别生成数据库文件,basedir指定的是数据库的安装目录

    mysql_install_db --datadir=/mysqldb/3306/data --basedir=/usr
    mysql_install_db --datadir=/mysqldb/3307/data --basedir=/usr
    mysql_install_db --datadir=/mysqldb/3308/data --basedir=/usr

额外:可以使用mysql -e ‘show variables like "basedir";‘查看数据库的安装目录;
6 针对不同的三个实例也要准备三个不同的配置文件

    cp /etc/my.cnf /mysqldb/3306/etc
    vim /mysqldb/3306/etc/my.cnf                         #将配置文件内容修改为以下格式
        datadir=/mysqldb/3306/data                       #指定数据库的存放位置
        socket=/mysqldb/3306/socket/mysql.sock           #指定socket文件存放位置
        log-error=/mysqldb/3306/log/mariadb.log          #指定错误日志的存放位置
        pid-file=/mysqldb/3306/pid/mariadb.pid           #指定pid文件的存放位置
    #   !includedir /etc/my.cnf.d                        #注释这一行调用功能

7 将修改好的配置文件分别复制到另外两个实例的目录并进行修改,要在3307和3308的配置文件中分别添加一行port=3307和port=3308,由于默认为3306所以不用写

当时当多实例的时候就要在配置文件当中指定端口!!
    cp /mysqldb/3306/etc/my.cnf /mysqldb/3307/etc/
    cp /mysqldb/3306/etc/my.cnf /mysqldb/3308/etc/
    vim /mysqldb/3307/etc/my.cnf
        将前面定义路径位置都改为3307即可
    vim /mysqldb/3308/etc/my.cnf
        将前面定义路径位置都改为3308即可

8 准备服务脚本

    已经有一个准备好的脚本直接上传,在其上修改即可,以下为脚本内容,变量根据实际情况进行修改,脚本名称为mysqld;
        以下有一个cmd_path变量之所以定义为/usr/bin是因为mysqld_safe文件在/usr/bin下,以下内容根据实际情况进行更改即可;
    #!/bin/bash
    port=3306
    mysql_user="root"
    mysql_pwd=""
    cmd_path="/usr/bin"
    mysql_basedir="/mysqldb"
    mysql_sock="${mysql_basedir}/${port}/socket/mysql.sock"

    function_start_mysql()
    {
        if [ ! -e "$mysql_sock" ];then
          printf "Starting MySQL...\n"
          ${cmd_path}/mysqld_safe --defaults-file=${mysql_basedir}/${port}/etc/my.cnf  &> /dev/nul
    l  &
        else
          printf "MySQL is running...\n"
          exit
        fi
    }

    function_stop_mysql()
    {
        if [ ! -e "$mysql_sock" ];then
           printf "MySQL is stopped...\n"
           exit
        else
           printf "Stoping MySQL...\n"
           ${cmd_path}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S ${mysql_sock} shutdown
       fi
    }

    function_restart_mysql()
    {
        printf "Restarting MySQL...\n"
        function_stop_mysql
        sleep 2
        function_start_mysql
    }

    case $1 in
    start)
        function_start_mysql
    ;;
    stop)
        function_stop_mysql
    ;;
    restart)
        function_restart_mysql
    ;;
    *)
        printf "Usage: ${mysql_basedir}/${port}/bin/mysqld {start|stop|restart}\n"
    esac

9 将脚本分别复制到/mysqld/3307下和/mysqld/3308下并且修改

    cp /mysqld/3306/mysqld ../3307
    cp /mysqld/3306/mysqld ../3308
将port变量分别修改为3307和3308并且添加可执行权限
    chmod +x /mysqld/3306/mysqld
    chmod +x /mysqld/3307/mysqld
    chmod +x /mysqld/3308/mysqld
基于安全性考虑可以设置为700权限,除了自己谁都改不了这个脚本
    chmod 700 /mysqld/3306/mysqld
    chmod 700 /mysqld/3307/mysqld
    chmod 700 /mysqld/3308/mysqld

10 上述工作完成后,分别运行下面的mysqld的脚本启动即可
11 分别连接不同的实例也就是连接不同的socket文件查看是否可以连接成功

    mysql -S /mysqldb/3306/socket/mysql.sock
    mysql -S /mysqldb/3307/socket/mysql.sock
    mysql -S /mysqldb/3308/socket/mysql.sock
    连接成功之后可查看当前连接的数据库端口
    show variables like ‘port‘;

12 脚本当中定义了一行停止服务需要输入口令,当没有口令的时候直接回车即可,启动无需口令;
13 这种情况下安全性特别低,谁都可以连接到随机的一个数据库进行操作,所以咱们要添加密码增加安全性,此项添加的密码为mysql;

    mysqladmin -uroot -S /mysqldb/3306/socket/mysql.sock password ‘mysql‘
    mysqladmin -uroot -S /mysqldb/3307/socket/mysql.sock password ‘mysql‘
    mysqladmin -uroot -S /mysqldb/3308/socket/mysql.sock password ‘mysql‘
    在这设置了密码之后,不要忘了修改mysqld这个脚本当中的mysql_pwd变量,后面记得跟上修改的密码,这样关闭数据库的时候就无需输入密码了
另一种修改密码的方法:
    1 mysql -uroot -S /mysqldb/3307/socket/mysql.sock password ‘mysql‘            #登录到数据库中
    2 update mysql.user set password=password("centos") where user=‘root‘;        #将所有名为root的用户密码都改为centos并且在表中加密
    3 select user,password,host from mysql.user;                                  #查看修改后的表的内容
删除没有用的账号:
      drop user ‘‘@‘localhost‘;
      drop user ‘‘@‘centos7‘;
      drop user ‘root‘@‘centos7‘;
      drop user ‘root‘@‘::1‘;
      flush privileges;                     #执行生效;
删除没有用的数据库:
      drop database test;

以上是关于MySQL多实例搭建的主要内容,如果未能解决你的问题,请参考以下文章

MySql多实例搭建

MySQL多实例搭建

从零开始的MYSQL02 --- MySQL启动方式及故障排查,多实例搭建

MySQL主从集群搭建

MySQL主从复制(脚本配合)

mysql 多实例案例实战