MySQL數據庫基礎(3)多實例應用實戰


一、什么是MySQL多實例?

    簡單的說,就是在一台機器上開啟多個不同的服務端口(如:3306,3307),運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供各自的服務。

    共用一套MySQL安裝程序

    使用不同(也可以相同)的my.cnf配置文件、啟動程序、數據文件

    作個比喻,MySQL多實例相當於房子的多個卧室一樣,每個勢力可以看做一個卧室,整個服務器就是一套房子。邏輯上是獨立的,但是互相會有影響。

 

二、多實例的作用與問題

    1、有效利用服務器資源

        當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務。

    2、節約服務器資源

        當公司資金緊張,但是數據庫又需要各自盡量獨立提供服務,而且,需要主從同步等技術時,多實例就再好不過了。

    3、資源互相搶占問題

        當某個服務實例並發很高或者有慢查詢時,整個實例會消耗整個更多的內存、CPU、磁盤IO資源,導致服務器上的其他的實例提供服務的質量下降。這就相當於大家住在一個房子的不同卧室一樣,早晨起來上班,都要刷牙、洗臉等,這樣衛生間就會被長期占用,其它人就要等待一樣的道理。

 

三、MySQL多實例生產應用場景

    1、資金緊張型公司的選擇

    2、並發訪問不是特別大的業務

    3、門戶網站應用MySQL多實例場景

    主要是倆點:節約資金,充分利用資源

 

四、MySQL多實例常見配置方案

    1、多配置文件部署方案:配置多個配置文件及多個啟動程序

    

 

    提示:配置文件,啟動程序,數據文件分別是獨立的

 

    2、單一配置文件部署方案

     mysqld_multi  (官方推薦) 耦合性太高

 

五、安裝多實例MySQL數據庫

    1、MySQL安裝詳細請看https://www.cnblogs.com/cnxy168/p/11540198.html

    2、創建MySQL多實例的數據文件目錄

        rm -f /etc/init.d/mysqld 

        [root@localhost ~]# mkdir -p /data/{3306,3307}/data
        [root@localhost ~]# tree /data
        /data        #總的多實例根目錄
        ├── 3306      #3306實例的目錄
        │   └── data    #3306手里的數據文件目錄
        └── 3307      #3307實例的目錄
          └── data    #3307實例的數據文件目錄

        4 directories, 0 files

        生產硬件配置:MEM 32g 雙cpu 8核  磁盤6*600g sas  15k。能跑2-3個實例

    3、創建MySQL多實例的數據配置文件

rm -f /etc/init.d/mysqld 
mkdir -p /data/{3306,3307}/data

[root@localhost ~]# tree /data
/data
├── 3306
│   └── data
└── 3307
    └── data

4 directories, 0 files

[root@localhost ~]# cd /home/oldboy/tools/
root@localhost tools]# unzip data.zip
[root@localhost tools]# cp data/3306/my.cnf /data/3306
[root@localhost tools]# cp data/3307/my.cnf /data/3307
[root@localhost tools]# tree /data
/data
├── 3306
│   ├── data
│   └── my.cnf
└── 3307
    ├── data
    └── my.cnf

4 directories, 2 files

[root@localhost tools]# cp data/3306/mysql /data/3306
[root@localhost tools]# cp data/3307/mysql /data/3307

 [root@localhost tools]# tree /data
  /data
  ├── 3306
  │   ├── data
  │   ├── my.cnf
  │   └── mysql
  └── 3307
      ├── data
      ├── my.cnf
      └── mysql           

  4 directories, 4 files     

cp data.zip  /
unzip -o data.zip    #可代替上面操作

 

    4、配置MySQL多實例的文件權限

         授權mysql用戶和組管理整個多實例目錄/data

[root@localhost tools]# chown -R mysql.mysql /data
[root@localhost tools]# find /data/ -type f -name "mysql"
/data/3306/mysql
/data/3307/mysql
[root@localhost tools]# find /data/ -type f -name "mysql"|xargs ls -l
-rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
-rw-r--r--. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql
[root@localhost tools]# find /data/ -type f -name "mysql"|xargs chmod +x
[root@localhost tools]# find /data/ -type f -name "mysql"|xargs ls -l
-rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3306/mysql
-rwxr-xr-x. 1 mysql mysql 1307 9月  18 14:12 /data/3307/mysql

 

     5、配置MySQL命令全局使用路徑

        1)配置全局路徑意義

            如果不配置MySQL命令的全局路徑,就無法直接敲mysql等命令,也就是只能/usr/local/mysql/bin/mysql這樣敲命令

        2)[root@localhost tools]# tail -1 /etc/profile

          export PATH=/application/mysql/bin:$PATH

        

    6、初始化MySQL多實例的數據庫文件

        1)初始化命令為

          mysql5.5.32初始化命令:

[root@localhost tools]# cd /application/mysql/scripts/
[root@localhost scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3306/data --user=mysql
[root@localhost scripts]# ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3307/data --user=mysql

 

        2)為什么要初始化數據庫?

          a.初始化的主要目的就是創建基礎的數據庫文件,例如:生成mysql庫表等。

          b.初始化后查看對應實例數據目錄,可以看到如下文件。

[root@localhost scripts]# tree /data
/data
├── 3306
│   ├── data
│   │   ├── mysql
│   │   │   ├── columns_priv.frm
│   │   │   ├── columns_priv.MYD
│   │   │   ├── columns_priv.MYI
│   │   │   ├── db.frm
│   │   │   ├── db.MYD
│   │   │   ├── db.MYI
│   │   │   ├── event.frm
│   │   │   ├── event.MYD
│   │   │   ├── event.MYI
│   │   │   ├── func.frm
│   │   │   ├── func.MYD
省略。。。

    7、啟動MySQL多實例數據庫

[root@localhost scripts]# /data/3306/mysql start
Starting MySQL...
[root@localhost scripts]# /data/3307/mysql start
Starting MySQL...
[root@localhost scripts]# netstat -lntup|grep 330[6-7]
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      22823/mysqld        
tcp        0      0 0.0.0.0:3307                0.0.0.0:*                   LISTEN      24832/mysqld 

     8、MySQL故障排錯多實例數據庫

[root@localhost 3306]# grep log-error my.cnf|tail -1
log-error=/data/3306/mysql_oldboy3306.err
[root@localhost 3306]# cat mysql_oldboy3306.err 
190918 14:45:32 mysqld_safe Starting mysqld daemon with databases from /data/3306/data
190918 14:45:32 [Note] Plugin 'FEDERATED' is disabled.
190918 14:45:32 InnoDB: The InnoDB memory heap is disabled
190918 14:45:32 InnoDB: Mutexes and rw_locks use GCC atomic builtins
190918 14:45:32 InnoDB: Compressed tables use zlib 1.2.3
190918 14:45:32 InnoDB: Initializing buffer pool, size = 32.0M
190918 14:45:32 InnoDB: Completed initialization of buffer pool

     9、MySQL多實例數據庫管理方法

 

  ## 在MySQL里面   命令前面加 system  可以切換 數據庫

 六、MySQL安全配置

[root@localhost 3306]# mysqladmin -u root -S /data/3306/mysql.sock password 'oldboy123'
[root@localhost 3306]# mysqladmin -u root -S /data/3307/mysql.sock password 'oldboy123'
[root@localhost 3306]# vim mysql
[root@localhost 3306]# cd ..
[root@localhost data]# vim 3307/my
my.cnf                mysqld.pid            mysql.sock            
mysql                 mysql_oldboy3307.err  
[root@localhost data]# vim 3307/my
my.cnf                mysqld.pid            mysql.sock            
mysql                 mysql_oldboy3307.err  
[root@localhost data]# vim 3307/mysql.sock 
[root@localhost data]# ls
3306  3307
[root@localhost data]# cd 3307
[root@localhost 3307]# vim mysql
[root@localhost 3307]# find /data -type f -name "mysql" | -exec chmod 700 {} \;
-bash: -exec: command not found
[root@localhost 3307]# find /data -type f -name "mysql"  -exec chmod 700 {} \;
[root@localhost 3307]# find /data -type f -name "mysql"  -exec chown root.root {} \;
[root@localhost 3307]# find /data -type f -name "mysql"  -exec ls -l {} \;
-rwx------. 1 root root 1310 9月  18 17:48 /data/3306/mysql
-rwx------. 1 root root 1310 9月  18 17:48 /data/3307/mysql
[root@localhost 3307]# ss -lntup|grep 330
tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",26485,12))
tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",27202,11))
[root@localhost 3307]# pkill mysqld
[root@localhost 3307]# ss -lntup|grep 330
[root@localhost 3307]# /data/3306/mysql start
Starting MySQL...
[root@localhost 3307]# /data/3307/mysql start
Starting MySQL...
[root@localhost 3307]# ss -lntup|grep 330
tcp    LISTEN     0      128                    *:3306                  *:*      users:(("mysqld",28117,12))
tcp    LISTEN     0      128                    *:3307                  *:*      users:(("mysqld",28834,11))

 

 #在mysql腳本里面 修改數據庫密碼   把腳本修改為root權限

 

數據庫有密碼登錄數據庫

mysql -u用戶  -p密碼 -S /data/3306/mysql.sock

 

七、如何再添加一個MySQL實例

:g/A/s//B/g              #把符合A的內容全部替換為B
:%s/A/B/g               #把符合A的內容全部替換為B
:n1,n2s/A/B/gc        #n1,n2為數字,在第n1和n2間尋找A,用B替換

 

    增加一個MySQL實例的命令過程如下:

[root@localhost ~]# mkdir /data/3308/data -p
[root@localhost ~]# cp /data/3306/my.cnf /data/3308
[root@localhost ~]# cp /data/3306/mysql /data/3308
[root@localhost ~]# chown -R mysql.mysql /data/3308
[root@localhost ~]# vim /data/3308/mysql 
[root@localhost ~]# vim /data/3308/my.cnf     這兩項用上面的替換命令把3306替換成3308
[root@localhost scripts]#  ./mysql_install_db --basedir=/application/mysql/ --datadir=/data/3308/data --user=mysql
Installing MySQL system tables...
OK
Filling help tables...
OK
[root@localhost scripts]# /data/3308/mysql start
Starting MySQL...
[root@localhost scripts]# ss -lntup | grep 330
tcp    LISTEN     0      128                    *:3308                  *:*      users:(("mysqld",410,12))
[root@localhost scripts]# mysql -uroot  -S /data/3308/mysql.sock
[root@localhost scripts]# mysqladmin -u root -S /data/3308/mysql.sock password 'oldboy123'
[root@localhost scripts]# mysql -uroot -poldboy123 -S /data/3308/mysql.sock

 

 

八 、小結

    遠程連接:mysql -u用戶  -p密碼  -h 地址  -P 端口

 

    

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM