在集成項目中須要應對不一樣環境下的安裝配置,主流操做系統大體能夠分爲三種:Linux、Windows以及UNIX。其中Linux備受青睞的主要緣由有兩個:node
首先,Linux做爲自由軟件有兩個特色:一是它免費提供源碼,二是愛好者能夠按照本身的須要自由修改、複製和發佈程序的源碼,並公佈在Internet上。這就吸引了世界各地的操做系統高手爲Linux編寫各類各樣的驅動程序和應用軟件,使得Linux成爲一種不只只是一個內核,並且包括系統管理工具、完整的開發環境和開發工具、應用軟件在內,用戶很容易得到的操做系統。mysql
其次,究其根本,Linux是一個UNIX系統變種,所以也就具備了UNIX系統的一系列優良特性,UNIX上的應用能夠很方便地移植到Linux平臺上,這使得UNIX用戶很容易掌握Linux。linux
基於Linux的安全可靠、效率高、免費、良好的網絡支持、與UNIX徹底兼容等方面的考慮,Linux算是最經常使用的一種。這樣,在項目中就會有在Linux下安裝數據庫的需求,例如Oracle、MySQL等。本文主要介紹在Linux環境下安裝MySQL數據庫的兩種方式,以及MySQL數據庫的相關配置步驟,其中常見的一些問題也會進行說明,最後會展現一種比較常見的MySQL數據庫的備份方式——雙機熱備。web
數通暢聯新員工sql
廣大技術愛好者數據庫
操做系統:CentOS 6.4安全
MySQL:版本爲MySQL5.6服務器
Linux:Linux是一套無償使用和自由傳播的類Unix操做系統,是一個基於POSIX和UNIX的多用戶、多任務、支持多線程和多CPU的操做系統。它能運行主要的UNIX工具軟件、應用程序和網絡協議。它支持32位和64位硬件。Linux繼承了Unix以網絡爲核心的設計思想,是一個性能穩定的多用戶網絡操做系統。網絡
CentOS:(CommunityEnterprise Operating System,中文意思是:社區企業操做系統)是Linux發行版之一,它是來自於Red Hat Enterprise Linux依照開放源代碼規定釋出的源代碼所編譯而成。因爲出自一樣的源代碼,所以有些要求高度穩定性的服務器以CentOS替代商業版的Red Hat Enterprise Linux使用。二者的不一樣,在於CentOS並不包含封閉源代碼軟件。多線程
MySQL:MySQL是一個關係型數據庫管理系統,由瑞典MySQL AB 公司開發,目前屬於 Oracle 旗下產品。MySQL 最流行的關係型數據庫管理系統,在 WEB 應用方面MySQL是最好的 RDBMS (Relational Database Management System,關係數據庫管理系統) 應用軟件之一。
MYISAM:MySQL兩種常見的存儲引擎之一,特色是表數據文件和表索引文件都是獨立存放,適合記錄少於2000萬如下、併發量不是很高的環境,適合簡單的查詢,不支持事務,容易出現數據丟失,表損壞,常常須要修復,修復每每也致使數據丟失,適合讀多寫少的環境
INNODB:MySQL兩種常見的存儲引擎之一,特色是表數據文件和表索引文件是共同一個文件,適合大規模數據,小規模的數據反而效率不高,適合併發量高的環境、複雜的查詢,支持事務,支持數據自動修復,保證了數據丟失最少
在CentOS上安裝MySQL的方式大體能夠分爲兩類,一種是網絡環境通暢的狀況下,能夠經過YUM庫聯網安裝,另外一種是經過本地上傳MySQL介質進行安裝。
指令:yum list installed | grep mysql
指令:例如yum -y remove mysql-libs.x86_64
如有多個依賴文件則依次卸載,當結果顯示爲Complete!即卸載完畢
指令:yum list | grep mysql或 yum -y list mysql*
CentOS系統須要正常鏈接網絡
指令:yum -y install mysql-server mysql mysql-devel
指令:例如yum -y remove MySQL-client-advanced-5.6.22*
rpm -qa|grep -imysql
-i忽略大小寫
less/var/log/mysqld.log
mysql>update user set password=password('YouPassword') where user='root'; mysql>FLUSH PRIVILEGES; |
遠程鏈接時,防火牆啓用端口號
指令:iptables -I INPUT -p tcp--dport 3306 -j ACCEPT
mysql-advanced-5.6.23-linux-glibc2.5-x86_64.tar.gz
MySQL數據庫:MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm
MySQL客戶端:MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm
指令:rpm -qa | grep mysql
指令:例如rpm -e --nodeps mysql-libs-5.1.47-4.el6.i686
再次檢查是否已安裝MySQL
指令:rpm -ivh MySQL-server-5.6.22-1.linux_glibc2.5.x86_64.rpm
Preparing... ########################################### [100%] 1:MySQL-server ########################################### [100%] … A RANDOM PASSWORD HAS BEEN SET FOR THE MySQL root USER ! You will find that password in '/root/.mysql_secret'. You must change that password on your first connect, no other statement but 'SET PASSWORD' will be accepted. See the manual for the semantics of the 'password expired' flag. Also, the account for the anonymous user has been removed. In addition, you can run: /usr/bin/mysql_secure_installation which will also give you the option of removing the test database. This is strongly recommended for production servers. See the manual for more instructions. Please report any problems at http://bugs.mysql.com/ The latest information about MySQL is available on the web at http://www.mysql.com Support MySQL by buying support/licenses at http://shop.mysql.com New default config file was created as /usr/my.cnf and will be used by default by the server when you start it. You may edit this file to change server settings |
指令:netstat –nat
發現尚未3306的端口,說明MySQL服務尚未啓動
啓動MySQL服務
指令:service mysql start
Starting MySQL.......... SUCCESS! |
啓動成功後,再次檢查3306端口號
指令:rpm -ivh MySQL-client-5.6.22-1.linux_glibc2.5.x86_64.rpm
Preparing... ########################################### [100%] 1:MySQL-client ^C########################################### [100%] |
MySQL的經常使用備份方式可分爲三種:
優勢:最大好處是可以與正在運行的MySQL自動協同工做,在運行期間能夠確保備份是當時的點,它會自動將對應操做的表鎖定,不容許其餘用戶修改(只能訪問),可能會阻止修改操做,SQL文件通用方便移植。
缺點:備份的速度比較慢,若是是數據量不少的時候,就很耗時間。若是數據庫服務器處在提供給用戶服務狀態,在這段長時間操做過程當中,意味着要鎖定表(通常是讀鎖定,只能讀不能寫入數據),那麼服務就會影響的。
直接拷貝只適用於MYISAM類型的表。這種類型的表是與機器獨立的。但實際狀況是,設計數據庫的時候不可能所有使用MYISAM類型表。也不可能:由於MYISAM類型表與機器獨立,方便移植,因而就選擇這種表,這並非選擇它的理由。
缺點:不能去操做正在運行的MySQL服務器(在拷貝的過程當中有用戶經過應用程序訪問更新數據,這樣就沒法備份當時的數據)可能沒法移植到其餘機器上去。
更多的狀況是,會根據業務特色(好比須要支持事務機制就必須使用INNODB),查詢速度和服務性能來選擇表類型的。
MySQL數據庫沒有增量備份的機制。當數據量太大的時候備份是一個很大的問題。還好MySQL數據庫提供了一種主從備份的機制(也就是雙機熱備)
優勢:適合數據量大的時候。大的互聯網公司對於MySQL數據備份,都是採用熱機備份。搭建多臺數據庫服務器,進行主從複製。
實現機制:對於一個MySQL服務器,通常有兩個線程來負責複製和被複制。當開啓複製以後:
在考慮雙機熱備時,須要注意,通常意義上的雙機熱備都會有一個切換過程,這個切換過程多是一分鐘左右。在切換過程當中,服務是有可能短期中斷的。可是,當切換完成後,服務將正常恢復。所以,雙機熱備不是無縫、不中斷的,但它可以保證在出現系統故障時,可以很快恢復正常的服務,業務不致受到影響。而若是沒有雙機熱備,則一旦出現服務器故障,可能會出現幾個小時的服務中斷,對業務的影響就可能會形成很嚴重的損失。
環境要求:
主數據庫(Master)IP:10.254.1.248
備份數據庫(Slave)IP:10.254.1.249
備份前保證兩個數據庫的數據一致
Master端
grant file,select,replication slave on *.* to backup@10.254.1.249 identified by '123456'; |
sevice-id=1 log-bin=mysql-bin --------------打開日誌開關,二進制日誌文件 max_binlog_size=104857600 binlog_format=mixed--------日誌模式row level和statement level的結合 binlog-do-db= aeaiesb -------------在aeaiesb庫進行的操做記錄二進制日誌文件,而不是對aeaiesb庫的操做 binlog-ignore-db=mysql --------------------忽略對mysql庫的操做,即不記錄到日誌中 |
在MySQL命令行:
show master status mysql> show master status; +----------------------+-----------+------------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +----------------------+-----------+-------------------+------------------+ | mysql-bin.000013 | 1150 | aeaiesb | mysql | +-----------------------+----------+------------------+------------------+ 1 row in set (0.00 sec) |
結果表示如今寫日誌的文件是mysql-bin.000013,位置是1105,slave端要從這個點開始同步備份aeaiesb
slave端
service mysql stop |
server-id=2 replicate-same-server-id master-host=10.254.1.248 master-user=backup master-password=123456 master-port=3306 master-connect-retry=60 ----重複鏈接時間間隔 replicate-do-db=aeaiesb---同步master的aeaiesb庫 relay-log=miniweb2-relay-bin----設置I/O線程讀master的binlog並寫入本地的文件名,即爲relay-log |
service mysql start |
mysql> show slave status/G; *************************** 1. row *************************** Slave_IO_State: Master_Host: 10.254.1.248 Master_User: backup Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql_bin.000013 Read_Master_Log_Pos: 1105 Relay_Log_File: localhost-relay-bin.000001 Relay_Log_Pos: 4 Relay_Master_Log_File: mysql_bin.000013 Slave_IO_Running: No Slave_SQL_Running: Yes Replicate_Do_DB: aeaiesb |
1) 在命令行下:
(1)slave stop; (2)change master to master_host='10.254.1.248',master_user='backup',master_password='123456',master_log_file='mysql-bin.000014',master_log_pos=1150 ;(前面查看的master狀態) (3)slave start; (4)show slave status; mysql> show slave status/G; *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 10.254.1.248 Master_User: backup Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000013 Read_Master_Log_Pos: 1105 Relay_Log_File: localhost-relay-bin.000002 Relay_Log_Pos: 251 Relay_Master_Log_File: mysql-bin.000013 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: aeaiesb |
這樣就能夠進行同步了,在master的aeaiesb庫中建立表,並插入數據會實時在slave端顯示。
首先,MySQL安裝完成後不像 SQLServer 默認安裝在一個目錄,它的數據庫文件、配置文件和命令文件分別在不一樣的目錄,瞭解這些目錄很是重要,尤爲對於Linux的初學者,由於 Linux自己的目錄結構就比較複雜,若是搞不清楚MySQL的安裝目錄那就無從談起深刻學習。
a、數據庫目錄 /var/lib/mysql/
b、配置文件 /usr/share/mysql(mysql.server命令及配置文件)
c、相關命令 /usr/bin(mysqladmin mysqldump等命令)
d、啓動腳本 /etc/rc.d/init.d/(啓動腳本文件mysql的目錄)
其次,因爲MySQL數據庫目錄佔用磁盤比較大,而MySQL默認的數據文件存儲目錄爲 /"var/lib/mysql",也能夠把要把數據目錄移到"/" 根目錄下的 "mysqldata" 目錄中
終端執行命令
/etc/init.d/mysql stop |
cp -r /var/lib/mysql /disk1/mysqldata |
先備份,再修改
cp /etc/my.cnf /etc/my.cnfbak vi /etc/my.cnf |
在打開的文件中找到datadir這行代碼,查看後面的路徑,作備份(在這行代碼前加#)
原路徑:/var/lib/mysql
新路徑:/disk1/mysqldata
先備份,再修改
cp /etc/init.d/mysqld /etc/init.d/mysqldbak vi /etc/init.d/mysqld |
datadir原路徑:/var/lib/mysql
datadir新路徑:/disk1/mysqldata
cp /usr/bin/mysqld_safe /usr/bin/mysqld_safebak vi /usr/bin/mysqld_safe |
datadir原路徑:/var/lib/mysql
datadir新路徑:/disk1/mysqldata
ln -s /disk1/mysqldata /mysql.sock /var/lib/mysql/mysql.sock |
service mysqld start |
mysql> show variables like '%dir%'; |
經過查看MySQL日誌時發現Table ‘mysql.plugin’ doesn’t exist這樣的問題,這是由於新安裝的MySQL須要初始化數據庫
解決步驟:
1) 進入./mysql/bin目錄下,執行腳本./mysql_install_db;
2) 執行完(1)後,此時會在./mysql/var目錄下建立兩個目錄文件mysql、test;
3) 修改mysql、test兩個目錄及目錄下全部文件的權限:
指令:chown mysql:mysql -R mysql test
mysqld_safe Starting mysqld daemon with databases from /var/lib/mysql [Warning] Can't create test file /var/lib/mysql/localhost.lower-test [Warning] Can't create test file /var/lib/mysql/localhost.lower-test /usr/sbin/mysqld: Can't change dir to '/var/lib/mysql/' (Errcode: 13) [ERROR] Aborting [Note] /usr/sbin/mysqld: Shutdown complete |
首先關閉selinux服務
cd /etc/selinux vi config |
修改selinux爲disabled,重啓機器
Fatal error: Can't open and lock privilege tables: Table 'mysql.host' doesn't exist |
使用命令
mysql_install_db --user=mysql |
初始化命令
ERROR 1045 (28000): Access denied for user 'root'@'localhost' (using password: YES) |
須要重置密碼
1) 首先中止MySQL服務
service mysql stop |
2) 用mysqld_safe重啓服務
/usr/bin/mysqld_safe --skip-grant-tables |
3) 無密碼登陸
mysql –u root |
4) 受權
grant all privileges on *.* to 'root'@'localhost' identified by '密碼' with grant option; |
chown -R mysql:mysql /disk1/mysqldata |
CentOS鏡像下載:
http://www.linuxidc.com/Linux/2007-09/7399p3.htm