1. 程式人生 > >MySQL多實例搭建

MySQL多實例搭建

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多實例搭建