1. 程式人生 > >Mysql DBA 高級運維學習筆記-Mysql常見多實例配置方案及多實例安裝

Mysql DBA 高級運維學習筆記-Mysql常見多實例配置方案及多實例安裝

mkdir ping 完成後 shutdown quick sta uic long mysql

本文為我學習老男孩老師MySQL DBA高級運維的學習筆記,菜鳥一個如果有寫的不對的地方,請各位大神多多指點,小弟我會非常感謝。呵呵~

7.6.1 MySQL多實例常見配置方案

6.1.1 多實例配置文件部署方案

通過配置多個配置文件及多個啟動程序來實現多實例的方案

[root@mysql ~]# tree -L 2 /data/
/data/
├── 3306
│   ├── data
│   ├── my.cnf
│   └── mysql
└── 3307
├── data
├── my.cnf
└── mysql

原則:降低耦合性

6.2 安裝多實例MySQL數據庫

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

MySQL的安裝上篇已經寫了,這裏就不再安裝了。我們的數據文件目錄采用的是/data目錄作為mysql多實例總的根目錄,然後規劃不同的MySQL實例端口號來作為/data下面的二級目錄,不同的端口號就是不同的實例目錄以區別不同的實例,二級目錄下包含mysql數據文件、配置文件以及啟動文件的目錄。

(1) 創建相關mysql多實例的目錄 如下

#####我們先把安裝的單實例mysql停掉,要不然會沖突
[root@mysql ~]# pkill mysqld
#####然後把之前安裝的單實例mysql的啟動文件刪掉,以後就不用這個方法啟動了
[root@mysql ~]# rm -f /etc/init.d/mysqld
提示:多實例mysql的安裝和單實例mysql的安裝在make && make install之後就不同了。
#####創建多實例目錄,我們這裏創建兩個實例,如果想創建3個、4個同理往下增加即可。
[root@mysql ~]# mkdir -p /data/{3306,33307}/data
[root@mysql ~]# tree /data/
/data/? 總的多實例根目錄
├── 3306             3306實例的目錄
│   └── data     3306實例的數據文件目錄
└── 33307       3307實例的目錄
└── data            3307實例的數據文件目錄
4 directories, 0 files

6.2.2 創建MySQL多實例的配置文件

MySQL數據庫默認為用戶提供了多個配置文件模板,用戶可以根據硬件配置大小來選擇

[root@mysql mysql-5.5.32]# ls -l support-files/*.cnf

-rw-r--r--. 1 root root  4723 1月  11 05:31 support-files/my-huge.cnf

-rw-r--r--. 1 root root 19791 1月  11 05:31 support-files/my-innodb-heavy-4G.cnf

-rw-r--r--. 1 root root  4697 1月  11 05:31 support-files/my-large.cnf

-rw-r--r--. 1 root root  4708 1月  11 05:31 support-files/my-medium.cnf

-rw-r--r--. 1 root root  2872 1月  11 05:31 support-files/my-small.cnf

上面是單實例的配置文件的默認配置文件模板,配置多實例就不同了為了保證多實例之間彼此獨立。因此,我們為每一個實例建立一個配置文件,一個啟動文件,對應自己的數據文件。
在實際工作中可以拿早已修改好的模板來進行修改,通過rz命令等方式上傳配置文件模板my.cnf文件。
我們在mysql安裝包目錄拷貝一個數據庫文件重命名為my.cnf,然後將my.cnf內容清空,添加下面內容。下面是3306的配置文件,3307的配置文件要把my.cnf中的3306替換成3307,註意3307中的server-id值一定要修改不能3306中的server-id一樣。

[root@mysql ~]# cp /home/zbf/mysql-5.5.32/support-files/my-small.cnf /data/3306/my.cnf
[root@mysql 3306]# > my.cnf
[root@mysql 3306]# vim my.cnf
  1 [client]
  2 port= 3306
  3 socket  = /data/3306/mysql.sock
  4 [mysql]
  5 no-auto-rehash
  6 [mysqld]
  7 user= mysql
  8 port= 3306
  9 socket  = /data/3306/mysql.sock
 10 basedir = /usr/local/mysql
 11 datadir = /data/3306/data
 12 open_files_limit= 1024
 13 back_log = 600
 14 max_connections = 800
 15 max_connect_errors = 3000
 16 table_cache = 614
 17 external-locking = FALSE
 18 max_allowed_packet =8M
 19 sort_buffer_size = 1M
 20 join_buffer_size = 1M
 21 thread_cache_size = 100
 22 thread_concurrency = 2
 23 query_cache_size = 2M
 24 query_cache_limit = 1M
 25 query_cache_min_res_unit = 2k
 26 #default_table_type = InnoDB
 27 thread_stack = 192K
 #transaction_isolation = READ-COMMITTED
 29 tmp_table_size = 2M
 30 max_heap_table_size = 2M
 31 long_query_time = 1
 32 #log_long_format
 33 #log-error = /data/3306/error.log
 34 #log-slow-queries = /data/3306/slow.log
 35 pid-file = /data/3306/mysql.pid
 36 log-bin = /data/3306/mysql-bin
 37 relay-log = /data/3306/relay-bin
 38 relay-log-info-file = /data/3306/relay-log.info
 39 binlog_cache_size = 1M
 40 max_binlog_cache_size = 1M
 41 max_binlog_size = 2M
 42 expire_logs_days = 7
 43 key_buffer_size = 16M
 44 read_buffer_size = 1M
 45 read_rnd_buffer_size = 1M
 46 bulk_insert_buffer_size = 1M
 47 #InnoDB_sort_buffer_size = 1M
 48 #InnoDB_max_sort_file_size = 10G
 49 #InnoDB_max_extra_sort_file_size = 10G
 50 #InnoDB_repair_threads = 1
 51 #InnoDB_recover
 52 lower_case_table_names = 1
 53 skip-name-resolve
 54 slave-skip-errors = 1032,1062
 55 replicate-ignore-db=mysql
 56 server-id = 1
 57 innodb_additional_mem_pool_size = 4M
 58 innodb_buffer_pool_size = 32M
 59 innodb_data_file_path = ibdata1:128M:autoextend
 60 innodb_file_io_threads = 4
 61 innodb_thread_concurrency = 8
 62 innodb_flush_log_at_trx_commit = 2
 63 innodb_log_buffer_size = 2M
 64 innodb_log_file_size = 4M
 65 innodb_log_files_in_group = 3
 66 innodb_max_dirty_pages_pct = 90
 67 innodb_lock_wait_timeout = 120
 68 innodb_file_per_table = 0
 69 [mysqldump]
 70 quick
 71 max_allowed_packet = 2M
 [mysqld_safe]
 73 log-error=/data/3306/mysql_zbf3306.err
 74 pid-file=/data/3306/mysqld.pid

6.2.3 創建啟動文件

下面是3306實例的配置文件,配置3307實例的配置文件只需要把3306實例配置文件中的3306替換成3307。

#!/bin/bash
cmdPath="/usr/local/mysql/bin"
myPath="/data/3306"
softPath="/usr/local/mysql"
socketfile="$myPath/mysql.sock"
my_user="root"
my_pass="123456"  數據庫設置的密碼是多少這裏就填多少
start(){
if [ ! -e "$socketfile" ];then
printf "Starting MySQL......\n"
/bin/sh   ${cmdPath}/mysqld_safe --defaults-file=${myPath}/my.cnf --user=mysql --basedir=${softPath} --datadir=${myPath}/data &>/dev/null &
sleep 2
   else
printf "Mysqld is running....\n" && exit 1
   fi
}
stop(){
   if [ ! -e "$socketfile" ];then
printf "MySQL is stopped...\n"
        exit 1
   else
        printf "Stoping MySQL....\n"
        mysqladmin -u"${my_user}" -p"${my_pass}"    -S "$socketfile" shutdown 
    fi
}
restart(){
    printf "Restarting MySQL...\n"
stop
    sleep 2
start
}  
case "$1" in
   start)
start
   ;;
   stop)
stop
   ;;
   restart)
restart
   ;;
   *)
printf "Usage: $myPath/mysql {start|stop|restart}\n"
exit 1
esac

###最終效果圖如下

[root@mysql ~]# tree  /data
/data
├── 3306
│   ├── data
│   ├── my.cnf  3306實例的配置文件
│   └── mysql       3306實例的啟動文件
└── 3307
├── data
├── my.cnf  3307實例的配置文件
└── mysql   3307實例的啟動文件

###多實例啟動文件啟動mysql服務實質

mysql_safe --defaults-file=/data/3306/my.cnf 2>&1 > /dev/null &
mysql_safe --defaults-file=/data/3307/my.cnf 2>&1 > /dev/null &

###多實例啟動文件的平滑停止mysql服務實質

mysqladmin -u root -p123456 -S /data/3306/mysql.sock shutdown
mysqladmin -u root -p123456 -S /data/3307/mysql.sock shutdown

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

[root@mysql ~]# chown -R mysql.mysql /data
[root@mysql ~]# find /data -name mysql
/data/3306/mysql
/data/3307/mysql

6.2.5 授權mysql多實例服務所有啟動文件mysql可執行

[root@mysql ~]# find /data -type f -name "mysql"|xargs ls -l
-rw-r--r--. 1 mysql mysql 1604 1月  12 17:06 /data/3306/mysql
-rw-r--r--. 1 mysql mysql 1604 1月  12 17:06 /data/3307/mysql
[root@mysql ~]# find /data -type f -name "mysql"|xargs chmod +x
[root@mysql ~]# find /data -type f -name "mysql"|xargs ls -l
-rwxr-xr-x. 1 mysql mysql 1604 1月  12 17:06 /data/3306/mysql
-rwxr-xr-x. 1 mysql mysql 1604 1月  12 17:06 /data/3307/mysql

6.2.6 配置MySQL命令全局使用路徑

前面cmake安裝mysql的時候已經配過了,這裏就不配了。配完全局變量使用mysql命令就能找到了。

[root@mysql ~]# tail -1 /etc/profile
export PATH=/usr/local/mysql/bin:$PATH

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

(1)初始化命令

###mysql5.1.X初始化命令

mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql
mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql

###mysql5.5.32初始化命令

[root@mysql ~]# cd /home/zbf/mysql-5.5.32/scripts/

要在scripts下執行,不在mysql bin下。註意要在當前目錄下執行加 ./。

./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3306/data/ --user=mysql
./mysql_install_db --basedir=/usr/local/mysql/ --datadir=/data/3307/data/ --user=mysql

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

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

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

6.2.8 啟動mysql服務

/data/3306/mysql start
/data/3307/mysql start

6.2.9 MySQL故障排錯多實例數據庫

如果mysql沒有起來排查方法如下

(1)如果發現沒有顯示MySQL的端口,請等待幾秒mysql服務啟動會有點慢。

(2)如果還是不行,請查看錯誤日誌,錯誤日誌路徑在my.cnf配置文件路徑下面。
grep log-error /data/3306/mysql_zbf3306.err|tail -1

(3)細看所有執行命令返回的輸出,不要忽略關鍵的輸出結果。

(4)查看系統的/var/log/messages。

(5)如果是關聯服務,要同時查看相關服務的LOG。

6.2.10 Mysql多實例登錄

Mysql安裝完成後,默認情況下管理員賬號root是無密碼的。登錄不同的mysql數據庫需要指定不同庫的sock路徑。如果是遠程的話就指定IP地址。

[root@mysql ~]# mysql -S /data/3306/mysql.sock 
[root@mysql ~]# mysql -S /data/3307/mysql.sock 

6.3 MySQL安全配置

6.3.1 為root增加密碼

mysqladmin -u root -S /data/3306/mysql.sock password ‘123456‘
mysqladmin -u root -S /data/3307/mysql.sock password ‘123456‘

###設置完數據路密碼登錄數據庫的方法

[root@mysql 3306]# mysql -uroot -p123456 -S /data/3306/mysql.sock
[root@mysql 3306]# mysql -uroot -p123456 -S /data/3307/mysql.sock

6.3.2 為mysql多實例啟動腳本修改執行權限,只允許root用戶有執行權限

[root@mysql ~]# find /data -type f -name "mysql" -exec ls -l {} \;
-rwxr-xr-x 1 mysql mysql 1252 1月  15 02:18 /data/3306/mysql
-rwxr-xr-x 1 mysql mysql 1252 1月  15 04:45 /data/3307/mysql
[root@mysql ~]# find /data -type f -name "mysql" -exec chmod 700 {} \;
[root@mysql ~]# find /data -type f -name "mysql" -exec chown 700 {} \;
[root@mysql ~]# find /data -type f -name "mysql" -exec ls -l {} \;
-rwx------ 1 root root 1252 1月  15 02:18 /data/3306/mysql
-rwx------ 1 root root 1252 1月  15 04:45 /data/3307/mysql

Mysql DBA 高級運維學習筆記-Mysql常見多實例配置方案及多實例安裝