MySQL安裝

1 ##上傳MySQL安裝包## 2 mkdir /home/oldboy/tools -p 3 cd /home/oldboy/tools/ 4 ###wget -q http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.34.tar.gz 5 ####安裝依賴 6 yum install ncurses-devel libaio-devel -y 7 ###yum安裝cmake 8 yum install cmake -y 9 ###添加MySQL用戶 10 useradd -s /sbin/nologin -M mysql 11 id mysql 12 ####解壓MySQL安裝包 13 tar xf mysql-5.6.34.tar.gz 14 cd mysql-5.6.34 15 ####編譯 16 cmake . -DCMAKE_INSTALL_PREFIX=/application/mysql-5.6.34 \ 17 -DMYSQL_DATADIR=/application/mysql-5.6.34/data \ 18 -DMYSQL_UNIX_ADDR=/application/mysql-5.6.34/tmp/mysql.sock \ 19 -DDEFAULT_CHARSET=utf8 \ 20 -DDEFAULT_COLLATION=utf8_general_ci \ 21 -DWITH_EXTRA_CHARSETS=all \ 22 -DWITH_INNOBASE_STORAGE_ENGINE=1 \ 23 -DWITH_FEDERATED_STORAGE_ENGINE=1 \ 24 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 \ 25 -DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 \ 26 -DWITH_ZLIB=bundled \ 27 -DWITH_SSL=bundled \ 28 -DENABLED_LOCAL_INFILE=1 \ 29 -DWITH_EMBEDDED_SERVER=1 \ 30 -DENABLE_DOWNLOADS=1 \ 31 -DWITH_DEBUG=0 32 echo $? 33 make && make install 34 echo $? 35 ln -s /application/mysql-5.6.34/ /application/mysql 36 ####初始化數據庫 37 cp support-files/my*.cnf /etc/my.cnf 38 /application/mysql/scripts/mysql_install_db --basedir=/application/mysql/ --datadir=/application/mysql/data --user=mysql 39 40 cp support-files/mysql.server /etc/init.d/mysqld 41 chmod 700 /etc/init.d/mysqld 42 chkconfig mysqld on 43 chkconfig --list mysqld 44 45 ##啟動數據庫 46 /etc/init.d/mysqld start 47 echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile 48 tail -1 /etc/profile 49 source /etc/profile 50 echo $PATH 51 mysql 52 53 ###出現問題查看日志 54 tail -100 /application/mysql/data/db01.err 55 56 ###優化數據庫 57 ###設置密碼 58 mysqladmin -uroot -p password oldboy123 59 ###清理無用的庫,無用的用戶 60 show databases; 61 drop database test; 62 select user,host from mysql.user; 63 drop user 'root'@'::1'; 64 select user,host from mysql.user; 65 drop user ''@'db01'; 66 drop user 'root'@'db01'; 67 drop user ''@'localhost'; 68 select user,host from mysql.user; 69 #################以上單實例#####################
第1章 MySQL多實例配置
1.1 什么是MySQL多實例?
簡單地說,MySQL多實例就是在一台服務器上同時開啟多個不同的服務端口(如:3306,3307),同時運行多個MySQL服務進程,這些服務進程通過不同的socket監聽不同的服務端口來提供服務。
這些MySQL多實例共用一套MySQL安裝程序,使用不同的my.cnf(也可以相同)配置文件、啟動程序(也可以相同)和數據文件。在提供服務時,多實例MySQL在邏輯上看來是各自獨立的,它們根據配置文件的對應設定值,獲得服務器相應數量的硬件資源。
打個比方吧,MySQL多實例就相當於房子的多個卧室,每個實例可以看作一間卧室,整個服務器就是一套房子,服務器的硬件資源(cpu,men,disk)、軟件資源(CentOS操作系統)可以看作房子的衛生間、廚房、客廳,是房子的共用資源。若你是北漂的小伙伴,與朋友一起租房子,相信更好理解,大家蝸居在一起,休息在自己的卧室,出來活動肯定是要共用上述公共資源。這樣就可以很好的理解MySQL多實例了。
其實很多網絡服務都是可以配置多實例的,例如nginx、Apache、haproxy、redis等都可以配置多實例。這在門戶網站使用都很廣泛。
1.2 MySQL多實例的作用於問題
- 有效利用服務器資源
當單個服務器資源有剩余時,可以充分利用剩余的資源提供更多的服務,且可以實現資源的邏輯隔離。
- 節約服務器資源
當公司資金緊張,但是數據庫又需要各自盡量獨立地提供服務,而且,需要主從復制等技術,多實例就再好不過了。
MySQL多實例有它的好處,但也有其弊端,比如,會存在資源互相搶占的問題。
當某個數據庫實例並發很高或者有SQL慢查詢時,整個實例會消耗大量的系統CPU、磁盤I/O等資源,導致服務器上的其他數據庫實例提供服務的質量一起下降。這就相當於大家住在一個房子的不同卧室一樣,早晨起來上班,都要刷牙、洗臉等,這樣衛生間就會長期占有,其他人就要等待一樣。不同實例獲取的資源是相對獨立的,無法像虛擬化一樣完全隔離。
1.3 MySQL多實例的生產應用場景
1、資金緊張型公司的選擇
若公司資金緊張,公司業務訪問量又不是太大,但又希望不同業務的數據庫服務各自盡量獨立地提供服務而互相不受影響,同時,還需要主從復制等技術提供備份或讀寫分離服務,那么,多實例就再好不過了。比如:可以通過3台服務器部署9~15個實例,交叉做主從復制、數據備份及讀寫分離,這樣就可以達到9~15台服務器每個只裝一個數據庫才有的效果。這里要強調的是,所謂的盡量獨立是相對的。
2、並發訪問不是特別大的業務
當公司業務訪問量不太大的時候,服務器的資源基本都是浪費的,這時就很適合多實例的應用,如果對SQL語句的優化做得比較好,MySQL多實例會是一個很值得使用的技術,即使並發很大,合理分配好系統資源以及搭配好服務,也不會有太大問題。
3、門戶網站應用MySQL多實例場景
門戶網站通常都會使用多實例,因為配置硬件好的服務器,可節省IDC機櫃空間,同時,跑多實例也會減少硬件資源跑不滿的浪費。比如:百度公司的很多數據庫都是多實例,不過,一般是從庫多實例,例如某部門使用的IBM服務器為48核CPU,內存96GB,一台服務器跑3~4個實例;此外,sina網也是用的多實例,內存48GB左右。
說明:據調查,sina網的數據庫單機1~4個數據庫實例的居多,其中又數1~2個的最多,因為大業務占用的機器比較多。服務器是DELL R510的居多,CPU是E5210,48GB內存,磁盤12*300GSAS,做RAID10,此為門戶網站的服務器配置參考。
另外,sina網站安裝數據庫時,一般采用編譯安裝的方式,並且會在進行優化之后做rpm包,以便統一使用。
1.4 配置MySQL多實例
上傳文件地址:
鏈接:https://pan.baidu.com/s/14nfi-bHweexKO5dJAoZyMA 密碼:nmko

1 ##關閉單實例,跟多實例端口有沖突 2 /etc/init.d/mysqld stop 3 chkconfig mysqld off 4 chkconfig --list|grep mys 5 ####創建目錄## 6 mkdir -p /data/{3306,3307}/data 7 ###上傳配置文件到根下,並解壓### 8 9 chown -R mysql.mysql /data/ 10 find /data -name mysql 11 find /data -name mysql|xargs chmod 700 12 find /data -name mysql|xargs ls -l 13 ####初始化數據庫 14 cd /application/mysql/scripts 15 ./mysql_install_db --defaults-file=/data/3306/my.cnf --basedir=/application/mysql --datadir=/data/3306/data --user=mysql 16 ./mysql_install_db --defaults-file=/data/3307/my.cnf --basedir=/application/mysql --datadir=/data/3307/data --user=mysql 17 ####配置環境變量### 18 #echo 'export PATH=/application/mysql/bin:$PATH' >>/etc/profile 19 #source /etc/profile 20 ####啟動數據庫### 21 /data/3306/mysql start 22 /data/3307/mysql start 23 netstat -lntup|grep 330 24 ###登錄數據庫#### 25 mysql -S /data/3306/mysql.sock 26 mysql -S /data/3307/mysql.sock
1.5 增加一個實例3308

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

1 vim mysql 2 #!/bin/sh 3 ################################################ 4 #this scripts is created by oldboy at 2007-06-09 5 #oldboy QQ:31333741 6 #site:http://www.etiantian.org 7 #blog:http://oldboy.blog.51cto.com 8 #oldboy trainning QQ group: 208160987 226199307 44246017 9 ################################################ 10 #init 11 port=3308 12 mysql_user="root" 13 mysql_pwd="oldboy123" 14 CmdPath="/application/mysql/bin" 15 mysql_sock="/data/${port}/mysql.sock" 16 start(){ 17 if [ ! -e "$mysql_sock" ];then 18 printf "Starting MySQL...\n" 19 /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf 2>&1 > /dev/null & 20 else 21 printf "MySQL is running...\n" 22 exit 1 23 fi 24 } 25 stop(){ 26 if [ ! -e "$mysql_sock" ];then 27 printf "MySQL is stopped...\n" 28 exit 1 29 else 30 printf "Stoping MySQL...\n" 31 ${CmdPath}/mysqladmin -u ${mysql_user} -p${mysql_pwd} -S /data/${port}/mysql.sock shutdown 32 fi 33 } 34 35 restart(){ 36 printf "Restarting MySQL...\n" 37 stop 38 sleep 2 39 start 40 }
1.6 快速增加一個實例3308

1 ####快速增加實例#### 2 mkdir -p /data/3308/data 3 \cp /data/3306/my.cnf /data/3308/ 4 \cp /data/3306/mysql /data/3308/ 5 sed -i 's/3306/3308/g' /data/3308/my.cnf 6 sed -i 's/server-id = 6/server-id = 8/g' /data/3308/my.cnf 7 sed -i 's/3306/3308/g' /data/3308/mysql 8 chown -R mysql:mysql /data/3308 9 chmod 700 /data/3308/mysql 10 cd /application/mysql/scripts 11 ./mysql_install_db --defaults-file=/data/3308/my.cnf --datadir=/data/3308/data --basedir=/application/mysql --user=mysql 12 chown -R mysql:mysql /data/3308 13 egrep "server-id|log-bin" /data/3308/my.cnf 14 /data/3308/mysql start 15 sleep 5 16 netstat -lnt|grep 3308
1.7 為數據庫設置密碼

1 #### 2 mysqladmin -uroot -p password oldboy123 -S /data/3308/mysql.sock 3 mysqladmin -uroot -p password oldboy123 -S /data/3307/mysql.sock 4 mysqladmin -uroot -p password oldboy123 -S /data/3306/mysql.sock
1.8 MySQL關閉優化

1 ####優化關閉MySQL#### 2 [root@db01 3306]# cat /data/3306/mysql_oldboy 3 #!/bin/sh 4 #init 5 port=3306 6 mysql_user="root" 7 mysql_pwd="oldboy123" 8 CmdPath="/application/mysql/bin" 9 mysql_sock="/data/${port}/mysql.sock" 10 mysqld_pid_file_path=/application/mysql/3306.pid 11 start(){ 12 if [ ! -e "$mysql_sock" ];then 13 printf "Starting MySQL...\n" 14 /bin/sh ${CmdPath}/mysqld_safe --defaults-file=/data/${port}/my.cnf --pid-file=$mysqld_pid_file_path 2>&1 > /dev/null & 15 sleep 3 16 else 17 printf "MySQL is running...\n" 18 exit 1 19 fi 20 } 21 stop(){ 22 if [ ! -e "$mysql_sock" ];then 23 printf "MySQL is stopped...\n" 24 exit 1 25 else 26 printf "Stoping MySQL...\n" 27 mysqld_pid=`cat "$mysqld_pid_file_path"` 28 if (kill -0 $mysqld_pid 2>/dev/null) 29 then 30 kill $mysqld_pid 31 sleep 2 32 fi 33 fi 34 } 35 36 restart(){ 37 printf "Restarting MySQL...\n" 38 stop 39 sleep 2 40 start 41 } 42 43 case "$1" in 44 start) 45 start 46 ;; 47 stop) 48 stop 49 ;; 50 restart) 51 restart 52 ;; 53 *) 54 printf "Usage: /data/${port}/mysql {start|stop|restart}\n" 55 esac 56 57 sh -x /data/3306/mysql_oldboy stop
1.9 不用密碼登錄配置

1 ###以前面配置的單實例MySQL為例 2 ###不用密碼登錄 3 [root@db01 3306]# head /etc/my.cnf 4 # For advice on how to change settings please see 5 # http://dev.mysql.com/doc/refman/5.6/en/server-configuration-defaults.html 6 # *** DO NOT EDIT THIS FILE. It's a template which will be copied to the 7 # *** default location during install, and will be replaced if you 8 # *** upgrade to a newer version of MySQL. 9 [client] 10 user=root 11 password=oldboy123 12 [root@db01 3306]# chmod 700 /etc/my.cnf
1.10 數據庫管理
#####數據庫管理###
help contents; #查看幫助,help可以用?替代
Account Management |
賬戶管理 |
Administration |
管理 |
Compound Statements |
復合語句 |
Data Definition |
數據定義 |
Data Manipulation |
數據操作 |
Data Types |
數據類型 |
Functions |
函數 |
Functions and Modifiers for Use with GROUP BY |
與GROUP BY相關的函數和修飾符 |
Geographic Features |
地理特征 |
Help Metadata |
幫助元數據 |
Language Structure |
語言結構 |
Plugins |
插件 |
Procedures |
存儲過程 |
Storage Engines |
存儲引擎 |
Table Maintenance |
表維護 |
Transactions |
事務處理 |
User-Defined Functions |
用戶自定義函數 |
Utility |
實用程序 |
1.11 MySQL密碼忘記找回

1 ###MySQL密碼忘記#### 2 mysqld_safe --skip-grant-tables --user=mysql & 3 #mysqld_safe --defaults-file=/data/3307/my.cnf --skip-grant-tables >/dev/null 2>&1 & 4 mysql 5 #用戶@主機 唯一標識 6 mysql> update mysql.user set password=PASSWORD('old') where user='root' and host='localhost'; 7 mysql> flush privileges; 8 /etc/init.d/mysqld stop 9 /etc/init.d/mysqld start