linux安裝mysql 8.0.x的完整步驟
MySQL
MySQL簡(jiǎn)介
MySQL原本是一個(gè)開放源代碼的關(guān)系數(shù)據(jù)庫(kù)管理系統(tǒng),原開發(fā)者為瑞典的MySQL AB公司,該公司于2008年被昇陽(yáng)微系統(tǒng)(Sun Microsystems)收購(gòu)。2009年,甲骨文公司(Oracle)收購(gòu)昇陽(yáng)微系統(tǒng)公司,MySQL成為Oracle旗下產(chǎn)品。
MySQL在過(guò)去由于性能高、成本低、可靠性好,已經(jīng)成為最流行的開源數(shù)據(jù)庫(kù),因此被廣泛地應(yīng)用在Internet上的中小型網(wǎng)站中。隨著MySQL的不斷成熟,它也逐漸用于更多大規(guī)模網(wǎng)站和應(yīng)用,比如維基百科、Google和Facebook等網(wǎng)站。非常流行的開源軟件組合LAMP中的“M”指的就是MySQL。
但被甲骨文公司收購(gòu)后,Oracle大幅調(diào)漲MySQL商業(yè)版的售價(jià),且甲骨文公司不再支持另一個(gè)自由軟件項(xiàng)目OpenSolaris的發(fā)展,因此導(dǎo)致自由軟件社群們對(duì)于Oracle是否還會(huì)持續(xù)支持MySQL社群版(MySQL之中唯一的免費(fèi)版本)有所隱憂,MySQL的創(chuàng)始人麥克爾·維德紐斯以MySQL為基礎(chǔ),成立分支計(jì)劃MariaDB。而原先一些使用MySQL的開源軟件逐漸轉(zhuǎn)向MariaDB或其它的數(shù)據(jù)庫(kù)。例如維基百科已于2013年正式宣布將從MySQL遷移到MariaDB數(shù)據(jù)庫(kù)[6]。
關(guān)系型數(shù)據(jù)庫(kù)
關(guān)系數(shù)據(jù)庫(kù)(英語(yǔ):Relational database),是創(chuàng)建在關(guān)系模型基礎(chǔ)上的數(shù)據(jù)庫(kù),借助于集合代數(shù)等數(shù)學(xué)概念和方法來(lái)處理數(shù)據(jù)庫(kù)中的數(shù)據(jù)。現(xiàn)實(shí)世界中的各種實(shí)體以及實(shí)體之間的各種聯(lián)系均用關(guān)系模型來(lái)表示。關(guān)系模型是由埃德加·科德于1970年首先提出的,并配合“科德十二定律”。現(xiàn)如今雖然對(duì)此模型有一些批評(píng)意見,但它還是數(shù)據(jù)存儲(chǔ)的傳統(tǒng)標(biāo)準(zhǔn)。標(biāo)準(zhǔn)數(shù)據(jù)查詢語(yǔ)言SQL就是一種基于關(guān)系數(shù)據(jù)庫(kù)的語(yǔ)言,這種語(yǔ)言執(zhí)行對(duì)關(guān)系數(shù)據(jù)庫(kù)中數(shù)據(jù)的檢索和操作。
關(guān)系模型由關(guān)系數(shù)據(jù)結(jié)構(gòu)、關(guān)系操作集合、關(guān)系完整性約束三部分組成。
MySQL特性
MySQL是一種使用廣泛的數(shù)據(jù)庫(kù),特性如下:
- 使用C和C++編寫,并使用了多種編譯器進(jìn)行測(cè)試,保證源代碼的可移植性
- 支持AIX、FreeBSD、HP-UX、Linux、Mac OS、Novell Netware、OpenBSD、OS/2
- Wrap、Solaris、Windows等多種操作系統(tǒng)。
- 為多種編程語(yǔ)言提供了API。編程語(yǔ)言包括C、C++、Python、Java、Perl、PHP、Eiffel、Ruby和Tcl等。
- 支持多線程,充分利用CPU資源
- 優(yōu)化的SQL查詢算法,有效地提高查詢速度
- 既能夠作為一個(gè)單獨(dú)的應(yīng)用程序應(yīng)用在客戶端服務(wù)器網(wǎng)絡(luò)環(huán)境中,也能夠作為一個(gè)庫(kù)而
- 嵌入到其他的軟件中提供多語(yǔ)言支持,常見的編碼如中文的GB 2312、BIG5,日文的Shift_JIS等都可以用作數(shù)據(jù)表名和數(shù)據(jù)列名
- 提供TCP/IP、ODBC和JDBC等多種數(shù)據(jù)庫(kù)連接途徑
- 提供用于管理、檢查、優(yōu)化數(shù)據(jù)庫(kù)操作的管理工具
- 可以處理?yè)碛猩锨f(wàn)條記錄的大型數(shù)據(jù)庫(kù)
MySQL應(yīng)用
與大型數(shù)據(jù)庫(kù)例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之處,如規(guī)模小、功能有限(MySQL Cluster的功能和效率都相對(duì)比較差)等,但是這絲毫也沒有減少它受歡迎的程度。對(duì)于一般的個(gè)人使用者和中小型企業(yè)來(lái)說(shuō),MySQL提供的功能已經(jīng)綽綽有余,而且由于MySQL是開放源碼軟件,因此可以大大降低總體擁有成本。 目前Internet上流行的網(wǎng)站構(gòu)架方式是LAMP(Linux+Apache+MySQL+PHP),即使用Linux作為操作系統(tǒng),Apache作為Web服務(wù)器,MySQL作為數(shù)據(jù)庫(kù),PHP作為服務(wù)器端腳本解釋器。由于Linux+Apache+MySQL+PHP都是自由或開放源碼軟件(FLOSS),因此使用LAMP不用花一分錢就可以建立起一個(gè)穩(wěn)定、免費(fèi)的網(wǎng)站系統(tǒng)。
MySLQ存儲(chǔ)引擎
- MySQL存儲(chǔ)引擎簡(jiǎn)介
插件式存儲(chǔ)引擎是MySQL數(shù)據(jù)庫(kù)最重要的特性之一,用戶可以根據(jù)應(yīng)用的需要選擇如何存儲(chǔ)和索引數(shù)據(jù)庫(kù),是否使用事務(wù)等。mySQL默認(rèn)支持多種存儲(chǔ)引擎,以適應(yīng)不同領(lǐng)域的數(shù)據(jù)庫(kù)應(yīng)用需要。用戶可以通過(guò)選擇使用不同的存儲(chǔ)引擎提高應(yīng)用的效率,提供靈活的存儲(chǔ),用戶設(shè)置可以按照自己的需要定制和使用自己的存儲(chǔ)引擎,以實(shí)現(xiàn)最大程度的可定制性。
MySQL常用的存儲(chǔ)引擎為MyISAM、InnoDB、MEMORY、MERGE,其中InnoDB提供事務(wù)安全表,其他存儲(chǔ)引擎都是非事務(wù)安全表。
MyISAM是MySQL的默認(rèn)存儲(chǔ)引擎。MyISAM不支持事務(wù)、也不支持外鍵,但其訪問速度快,對(duì)事務(wù)完整性沒有要求。
InnoDB存儲(chǔ)引擎提供了具有提交、回滾和崩潰恢復(fù)能力的事務(wù)安全。但是比起MyISAM存儲(chǔ)引擎,InnoDB寫的處理效率差一些并且會(huì)占用更多的磁盤空間以保留數(shù)據(jù)和索引。MySQL支持外鍵存儲(chǔ)引擎只有InnoDB,在創(chuàng)建外鍵的時(shí)候,要求附表必須有對(duì)應(yīng)的索引,子表在創(chuàng)建外鍵的時(shí)候也會(huì)自動(dòng)創(chuàng)建對(duì)應(yīng)的索引。
- MySQL存儲(chǔ)引擎特性
主要體現(xiàn)在性能、事務(wù)、并發(fā)控制、參照完整性、緩存、故障恢復(fù),備份及回存等幾個(gè)方面
目前比較普及的存儲(chǔ)引擎是MyISAM和InnoDB,而MyISAM又是絕大部分Web應(yīng)用的首選。MyISAM與InnoDB的主要的不同點(diǎn)在于性能和事務(wù)控制上。
MyISAM是早期ISAM(Indexed Sequential Access Method)的擴(kuò)展實(shí)現(xiàn),ISAM被設(shè)計(jì)為適合處理讀頻率遠(yuǎn)大于寫頻率的情況,因此ISAM以及后來(lái)的MyISAM都沒有考慮對(duì)事物的支持,不需要事務(wù)記錄,ISAM的查詢效率相當(dāng)可觀,而且內(nèi)存占用很少。
MyISAM在繼承了ISAM優(yōu)點(diǎn)的同時(shí),與時(shí)俱進(jìn)的提供了大量實(shí)用的新特性和相關(guān)工具。例如考慮到并發(fā)控制,提供了表級(jí)鎖。
而且由于MyISAM是每張表使用各自獨(dú)立的存儲(chǔ)文件(MYD數(shù)據(jù)文件和MYI索引文件),使得備份及恢復(fù)十分方便(拷貝覆蓋即可),而且還支持在線恢復(fù)。
所以如果應(yīng)用不需要事務(wù),不支持外鍵,處理的只是基本的CRUD(增刪改查)操作,那么MyISAM是不二選擇。
linux (CentOS7.5_x86_64)下安裝mysql8.0
# 下載mysql $ wget http://mirrors.163.com/mysql/Downloads/MySQL-8.0/mysql-8.0.13-el7-x86_64.tar.gz # 解壓 $ mysql tar -zxvf mysql-8.0.4-rc-linux-glibc2.12-x86_64.tar.gz -C /usr/local # 修改文件夾名稱 $ mv mysql-8.0.4-rc-linux-glibc2.12-x86_64/ mysql 添加默認(rèn)配置文件 $ vim/etc/my.cnf [client] port=3306 socket=/tmp/mysql.sock [mysqld] port=3306 user=mysql socket=/tmp/mysql.sock basedir=/usr/local/mysql datadir=/usr/local/mysql/data # 創(chuàng)建mysql組 $ groupadd mysql # 創(chuàng)建mysql用戶 $ useradd -g mysql mysql # 創(chuàng)建mysql數(shù)據(jù)目錄 $ mkdir $MYSQL_HOME/data # 初始化mysql $ /usr/local/mysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql/ --datadir=/usr/local/mysql/data/ # 初始化報(bào)錯(cuò) bin/mysqld: error while loading shared libraries: libaio.so.1: cannot open shared object file: No such file or directory # 解決方法 yum install -y libaio # 初始化報(bào)錯(cuò) 2018-07-08T02:53:24.542370Z 0 [System] [MY-010116] /usr/local/mysql/bin/mysqld (mysqld 8.0.4-rc) starting as process 17745 ... mysqld: Can't create/write to file '/tmp/mysql/data/ibd35qXQ' (Errcode: 13 - Permission denied) 2018-07-08T02:53:24.554816Z 1 [ERROR] [MY-011066] InnoDB: Unable to create temporary file; errno: 13 2018-07-08T02:53:24.554856Z 1 [ERROR] [MY-011066] InnoDB: InnoDB Database creation was aborted with error Generic error. You may need to delete the ibdata1 file before trying to start up again. 2018-07-08T02:53:24.555000Z 0 [ERROR] [MY-010020] Data Dictionary initialization failed. 2018-07-08T02:53:24.555033Z 0 [ERROR] [MY-010119] Aborting 2018-07-08T02:53:24.555919Z 0 [System] [MY-010910] /usr/local/mysql/bin/mysqld: Shutdown complete. # 解決辦法:修改/tmp/mysql的目錄權(quán)限 $ chown -R mysql:mysql /tmp/mysql # 初始化成功 > 如果無(wú)異常情況日志如下可以看到mysql默認(rèn)會(huì)生成root賬號(hào)和密碼root@localhost: /TI(mjVAs1Ta [root@localhost mysql]# bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data 2019-01-29T10:19:34.023997Z 0 [System] [MY-013169] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server in progress as process 4240 2019-01-29T10:19:39.764895Z 5 [Note] [MY-010454] [Server] A temporary password is generated for root@localhost: /TI(mjVAs1Ta 2019-01-29T10:19:43.041419Z 0 [System] [MY-013170] [Server] /usr/local/mysql/bin/mysqld (mysqld 8.0.13) initializing of server has completed # 拷貝mysql啟動(dòng)文件到系統(tǒng)初始化目錄 $ cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 啟動(dòng)mysql服務(wù)器 $ service mysqld start
mysql 基本操作
# 使用mysql客戶端連接mysql $ /usr/local/mysql/bin/mysql -u root -p password 修改mysql的默認(rèn)初始化密碼 > alter user 'root'@'localhost' identified by 'root'; # 創(chuàng)建用戶 CREATE USER '用戶名稱'@'主機(jī)名稱' INDENTIFIED BY '用戶密碼' > create user 'jack'@'localhost' identified by 'jack'; # 授予權(quán)限 grant 權(quán)限 on 數(shù)據(jù)庫(kù).表 to '用戶名'@'登錄主機(jī)' [INDENTIFIED BY '用戶密碼']; > grant replication slave on *.* to 'jack'@'localhost'; # 刷新 # $ flush privileges; # 修改root用戶可以遠(yuǎn)程連接 > update mysql.user set host='%' where user='root'; # 查看mysql所用用戶 > select user,host from mysql.user; # docker 修改mysql的最大連接數(shù) apt-get update apt-get install vim vim /etc/mysql/mysql.conf.d/mysqld.cnf max_connections=1000 > alter user 'root'@'%' identified with mysql_native_password by 'root';
mysql 集群主從復(fù)制
準(zhǔn)備兩臺(tái)安裝好的mysql服務(wù)器
# 配置主服務(wù)添加如下配置 $ vim /etc/my.cnf # 節(jié)點(diǎn)唯一id值 server-id=1 # 開啟二進(jìn)制日志 log-bin=mysql-bin # 指定日志格式 有mixed|row|statement 推薦mixed binlog-format=mixed # 步進(jìn)值auto_imcrement。一般有n臺(tái)主MySQL就填n(可選配置) auto_increment_increment=2 # 起始值。一般填第n臺(tái)主MySQL。此時(shí)為第一臺(tái)主MySQL(可選配置) auto_increment_offset=1 # 忽略mysql庫(kù)(可選配置) binlog-ignore=mysql # 忽略information_schema庫(kù)(可選配置) binlog-ignore=information_schema # 要同步的數(shù)據(jù)庫(kù),默認(rèn)所有庫(kù)(可選配置) replicate-do-db=db1 # slave 節(jié)點(diǎn)配置 # 節(jié)點(diǎn)唯一id值 server-id=2 # 開啟二進(jìn)制日志 log-bin=mysql-bin # 步進(jìn)值auto_imcrement。一般有n臺(tái)主MySQL就填n(可選配置) auto_increment_increment=2 # 起始值。一般填第n臺(tái)主MySQL。此時(shí)為第一臺(tái)主MySQL(可選配置) auto_increment_offset=2 # 要同步的數(shù)據(jù)庫(kù),默認(rèn)所有庫(kù)(可選配置) replicate-do-db=db1 # 查看 master 的狀態(tài) , 尤其是當(dāng)前的日志及位置 > show master status; +------------------+----------+--------------+------------------+-------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | +------------------+----------+--------------+------------------+-------------------+ | mysql-bin.000004 | 1608 | | | | +------------------+----------+--------------+------------------+-------------------+ # 在slave節(jié)點(diǎn)執(zhí)行如下命令 注意master_log_file 是對(duì)應(yīng)show master status;中file的值,master_log_pos是對(duì)應(yīng)position的值 > change master to master_host='192.168.79.15', master_user='root', master_password='root', master_log_file='mysql-bin.000009', master_log_pos=0; # 啟動(dòng) slave 狀態(tài) ( 開始監(jiān)聽 msater 的變化 ) > start slave; # 查看 slave 的狀態(tài) > show slave status\G *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 192.168.79.15 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000009 Read_Master_Log_Pos: 863 Relay_Log_File: node-6-relay-bin.000002 Relay_Log_Pos: 500 Relay_Master_Log_File: mysql-bin.000009 Slave_IO_Running: Yes Slave_SQL_Running: Yes Replicate_Do_DB: Replicate_Ignore_DB: Replicate_Do_Table: Replicate_Ignore_Table: Replicate_Wild_Do_Table: Replicate_Wild_Ignore_Table: Last_Errno: 0 Last_Error: Skip_Counter: 0 Exec_Master_Log_Pos: 863 Relay_Log_Space: 709 Until_Condition: None Until_Log_File: Until_Log_Pos: 0 Master_SSL_Allowed: No Master_SSL_CA_File: Master_SSL_CA_Path: Master_SSL_Cert: Master_SSL_Cipher: Master_SSL_Key: Seconds_Behind_Master: 0 Master_SSL_Verify_Server_Cert: No Last_IO_Errno: 0 Last_IO_Error: Last_SQL_Errno: 0 Last_SQL_Error: Replicate_Ignore_Server_Ids: Master_Server_Id: 1 Master_UUID: 6291c709-23af-11e9-99fb-000c29071862 Master_Info_File: mysql.slave_master_info SQL_Delay: 0 SQL_Remaining_Delay: NULL Slave_SQL_Running_State: Slave has read all relay log; waiting for more updates Master_Retry_Count: 86400 Master_Bind: Last_IO_Error_Timestamp: Last_SQL_Error_Timestamp: Master_SSL_Crl: Master_SSL_Crlpath: Retrieved_Gtid_Set: Executed_Gtid_Set: Auto_Position: 0 Replicate_Rewrite_DB: Channel_Name: Master_TLS_Version: Master_public_key_path: Get_master_public_key: 0 # 當(dāng)Slave_IO_Running: Yes和Slave_SQL_Running: Yes都為yes是說(shuō)明主從復(fù)制正常 #重置 slave 狀態(tài) . $ reset slave; #暫停 slave 狀態(tài) ; $ stop slave;
總結(jié)
以上就是這篇文章的全部?jī)?nèi)容了,希望本文的內(nèi)容對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,謝謝大家對(duì)本站的支持。
版權(quán)聲明:本站文章來(lái)源標(biāo)注為YINGSOO的內(nèi)容版權(quán)均為本站所有,歡迎引用、轉(zhuǎn)載,請(qǐng)保持原文完整并注明來(lái)源及原文鏈接。禁止復(fù)制或仿造本網(wǎng)站,禁止在非www.sddonglingsh.com所屬的服務(wù)器上建立鏡像,否則將依法追究法律責(zé)任。本站部分內(nèi)容來(lái)源于網(wǎng)友推薦、互聯(lián)網(wǎng)收集整理而來(lái),僅供學(xué)習(xí)參考,不代表本站立場(chǎng),如有內(nèi)容涉嫌侵權(quán),請(qǐng)聯(lián)系alex-e#qq.com處理。