mysql源代碼學習環境搭建(mysql資料庫環境搭建過程)

本文目錄一覽:

怎麼安裝mysql資料庫

如果是在linux-redhat系統下

1、yum源安裝:配置好yum源,然後yum install mysql* -y

2、源代碼安裝:第一步:創建mysql用戶,groupadd mysql

useradd -g mysql mysql

第二步:解壓***.tar.gz

第三步: 進入解壓縮文件

第四步:安裝cmake

第五步:cmake . \

-DCMAKE_INSTALL_PREFIX=/mysql/mysqldir \

-DMYSQL_DATADIR=/mysql/mysqldir/data \

-DWITH_INNOBASE_STORAGE_ENGINE=1 \

-DMYSQL_TCP_PORT=3306 \

-DMYSQL_UNIX_ADDR==/mysql/mysqldir/data/mysql.sock \

-DMYSQL_USER=mysql \

-DWITH_DEBUG=0

第六步:make

第七步:make install

怎樣在Linux環境下安裝部署MySQL資料庫系統

如何在linux下安裝mysql資料庫並配置

關於本文

本文將以MySQL 5.0.51為例,以CentOS 5為平台,講述MySQL資料庫的安裝和設置。

2. 關於MySQL

MySQL是最流行的開源SQL資料庫管理系統,它由MySQL AB開發、發布和支持。MySQL AB是一家由MySQL開發人員創建的商業公司,它是一家使用了一種成功的商業模式來結合開源價值和方法論的第二代開源公司。MySQL是MySQL AB的註冊商標。

MySQL是一個快速的、多線程、多用戶和健壯的SQL資料庫伺服器。MySQL伺服器支持關鍵任務、重負載生產系統的使用,也可以將它嵌入到一個大配置(mass-deployed)的軟體中去。

MySQL的官方發音是「My Ess Que Ell」,而不是「My sequel」。但是你也可以使用「My sequel」和其他的方言。

MySQL網站()提供了關於MySQL和MySQL AB的最新的消息。

MySQL具有如下特點或特性:

MySQL是一個資料庫管理系統;

MySQL是一個關係資料庫管理系統;

MySQL是開源的;

MySQL伺服器是一個快的、可靠的和易於使用的資料庫伺服器;

MySQL伺服器工作在客戶/伺服器或嵌入系統中;

有大量的MySQL軟體可以使用。

3. MySQL的安裝

MySQL有兩種安裝方式:源碼包安裝和二進位包安裝。這兩種方式各有特色:二位制包安裝不需編譯,針對不同的平台有經過優化編譯的不同的二進位文件以及包格式,安裝簡單方便;源碼包則必須先配置編譯再安裝,可以根據你所用的主機環境進行優化,選擇最佳的配置值,安裝定製更靈活。下面分別介紹這兩種安裝方式。

3.1 源碼包方式安裝

3.1.1 在linux系統中添加運行Mysql的用戶和組

/usr/sbin/groupadd mysql

/usr/sbin/useradd -d /var/lib/mysql -s /sbin/nologin -g mysql mysql

3.1.2 下載最新穩定發行版(GA)的MySQL軟體

訪問MySQL網站下載最新穩定發行版的MySQL源碼包。本文使用的是5.0.51版本,在linux系統下用下面的命令下載:

wget

3.1.3 解壓縮下載的源碼包

首先建立一個工作目錄( 筆者建議的目錄為/usr/local/src/mysql ) :

mkdir -p /usr/local/src/mysql

將下載的源碼包移至工作目錄:

mv mysql-5.0.51.tar.gz /usr/local/src/mysql

進入工作目錄並用tar命令解壓源碼包:

cd /usr/local/src/mysql

tar zxvf mysql-5.0.51.tar.gz

命令執行結束後,當前工作目錄下將生成一個新的子目錄mysql-5.0.51,此目錄下即為mysql的源碼文件。

3.1.4 配置Makefile文件

進入MySQL源碼目錄:

cd mysql-5.0.51

執行下面的命令可查看可配置選項:

./configure –help

本文使用的配置命令格式如下:

CC=gcc CFLAGS=”-O3″ CXX=gcc CXXFLAGS=”-O3 -felide-constructors -fno-exceptions -fno-rtti” ./configure –prefix=/usr/local/mysql –enable-thread-safe-client –enable-assembler –with-big-tables –with-client-ldflags=-all-static –with-mysqld-ldflags=-all-static –with-charset=utf8 –with-collation=utf8_general_ci –with-extra-charsets=complex

配置選項說明:

CC:C編譯器的名稱(用於運行configure),本文示例為gcc

CFLAGS:C編譯器的標誌(用於運行configure),本文示例為-O3,指定優化級別為3

CXX:C++編譯器的名稱(用於運行configure),本文示例為gcc

CXXFLAGS:C++編譯器的標誌(用於運行configure)

–prefix:指定安裝目錄,本文示例為/usr/local/mysql

–localstatedir:指定默認資料庫文件保存目錄,默認為安裝目錄下的var目錄

–enable-thread-safe-client:編譯線程安全版的MySQL客戶端庫

–enable-assembler:使用一些字元函數的彙編版本

–with-client-ldflags:客戶端鏈接參數,本文示例為指定靜態編譯mysql客戶端

–with-mysqld-ldflags:伺服器端鏈接參數,本文示例為指定靜態編譯mysql伺服器

–with-big-tables:在32位平台上支持大於4G行的表

–with-charset:指定默認字符集。mysql默認使用latin1(cp1252)字符集,可以使用此選項更改。字符集可以是big5、cp1251、cp1257、czech、danish、dec8、dos、euc_kr、gb2312、gbk、german1、hebrew、hp8、hungarian、koi8_ru、koi8_ukr、latin1、latin2、sjis、swe7、tis620、ujis、usa7或win1251ukr。

–with-collation:指定默認校對規則。mysql默認使用latin1_swedish_ci校對規則,可以使用此選項更改。

–with-extra-charsets:伺服器需要支持的字符集,有三種可能的值:空格間隔的一系列字符集名;complex ,包括不能動態裝載的所有字符集;all,將所有字符集包括進二進位。本文示例為complex。

注意:要想更改字符集和校對規則,要同時使用–with-charset和–with-collation選項。 校對規則必須是字符集的合法校對規則。(在mysql中使用SHOW COLLATION語句來確定每個字符集使用哪個校對規則)。

3.1.5 編譯源代碼

執行下面的命令編譯源代碼:

make

3.1.6 安裝

執行下面的命令安裝mysql到目標路徑:

make install

3.1.7 複製默認全局啟動參數配置文件到/etc目錄

源碼方式安裝需要手動複製配置文件,配置模板位於源碼樹的support-files目錄,有my-small.cnf、my-medium.cnf、my-large.cnf、my-huge.cnf四個,選擇跟你的環境相接近的一個複製到/etc目錄,並做適當修改。關於mysql配置文件的詳細信息請參閱筆者的其它文章或是mysql官方文檔。

本文示例選擇my-medium.cnf,執行下面的命令將其複製到/etc目錄:

cp ./support-files/my-medium.cnf /etc/my.cnf

3.1.8 初始化授權表

執行下面的命令初始化授權表:

./scripts/mysql_install_db –user=mysql

3.1.9 更改mysql數據目錄屬主和許可權

默認資料庫文件保存目錄為安裝目錄下的var目錄,執行configure命令時可通過–localstatedir參數指定不同的目錄,本文示例為默認位置。

chown -R mysql.mysql /usr/local/mysql/var

chmod -R 700 /usr/local/mysql/var

3.1.10 設置開機自啟動服務控制腳本

執行下面的命令複製啟動腳本到資源目錄:

cp ./support-files/mysql.server /etc/rc.d/init.d/mysqld

執行下面的命令增加mysqld服務控制腳本執行許可權:

chmod +x /etc/rc.d/init.d/mysqld

執行下面的命令將mysqld服務加入到系統服務:

chkconfig –add mysqld

執行下面的命令檢查mysqld服務是否已經生效:

chkconfig –list mysqld

命令輸出類似下面的結果:

mysqld 0:off 1:off 2:on 3:on 4:on 5:on 6:off

表明mysqld服務已經生效,在2、3、4、5運行級別隨系統啟動而自動啟動,以後可以使用service命令控制mysql的啟動和停止。

啟動mysqld服務:

service mysqld start

停止mysqld服務:

service mysqld stop

執行下面的命令關閉開機自啟動:

chkconfig mysqld off

執行下面的命令可以改變開機自啟動的運行級別為3、5:

chkconfig –level 35 mysqld on

3.1.11 將mysql的bin目錄加入PATH環境變數

編輯/etc/profile文件:

vi /etc/profile

在文件最後添加如下兩行:

PATH=$PATH:/usr/local/mysql/bin

export PATH

執行下面的命令使所做的更改生效:

. /etc/profile

3.2 二進位包方式安裝

3.2.1 從安裝媒體安裝

Mysql二進位包已經包含在CentOS 5的安裝媒體中,可以直接從安裝媒體中安裝下面三個rpm包:

mysql-5.0.22-2.1.0.1.i386.rpm

mysql-devel-5.0.22-2.1.0.1.i386.rpm

mysql-server-5.0.22-2.1.0.1.i386.rpm

不同的版本文件名有所不同,請注意區分。

執行下面的命令安裝:

rpm -iUvh mysql-5.0.22-2.1.0.1.i386.rpm

rpm -iUvh mysql-devel-5.0.22-2.1.0.1.i386.rpm

rpm -iUvh mysql-server-5.0.22-2.1.0.1.i386.rpm

3.2.2 通過yum安裝

如果你安裝的機器此時可以連接到互聯網,筆者建議使用yum命令來簡化安裝過程:

yum install mysql-server mysql-devel mysql

yum將自動從centos的鏡像站點查找你指明的軟體的最新二進位包,並檢查軟體包依賴關係,安裝軟體的同時自動安裝其依賴的軟體包。

mac os x 10.7 怎麼搭建django mysql環境

操作系統:Linux Cent OS 5 / Max OS X 10.6 snow leopard

相關環境:Python 2.6.4 ; MySQL 5.1.45

安裝版本:MySQL-python-1.2.3c1

方法/步驟

首先要下載下載:請到官方網站

解壓:tar zxvf MySQL-python*

進入文件目錄,運行以下命令:sudo python setup.py install

安裝完成,到你的python安裝目錄下的site-packages目錄里檢查以下文件是否存在,如果存在即代表安裝成功了Linux:MySQL_python-1.2.3c1-py2.6-linux-i686.eggMac OS X:MySQL_python-1.2.3c1-py2.6-macosx-10.4-x86_64.egg註:如果碰到mysql_config not found的問題,有兩種方法解決:1)sudo ln -s /usr/local/mysql/bin/mysql_config /usr/local/bin/mysql_config將mysql_confi從你的安裝目錄鏈接到/usr/local/bin目錄下,這樣就可以在任意目錄下訪問了(也可以放到/usr/bin)2)編輯源碼文件夾的site.cfg文件,去掉#mysql_config = /usr/local/bin/mysql_config前的注釋#,修改後面的路徑為你的mysql_config真正的目錄就可以了。(如果不知道 mysql_config在哪裡,運行命令:whereis mysql_config)

測試方法1)運行命令python進入python運行環境2)輸入以下python代碼進行測試import MySQLdb test=MySQLdb.connect(db=’mydb’,host=’myhost’,user=’u’,passwd=’p’) cur = test.cursor() cur.execute(‘show databases;’) for data in cur.fetchall(): print data 3)如果你在屏幕上看到了你幾個資料庫的庫名的輸出代表你安裝成功了

可能碰到的問題1)問題:ImportError: libmysqlclient_r.so.16: cannot open shared object file: No such file or directory原因是python無法找到mysql目錄下的libmysqlclient_r.so.16動態庫,其實MySQLdb是調用mysql的c函數庫.所以本機上首先得安裝了mysql然後: export LD_LIBRARY_PATH=/usr/local/mysql/lib/mysql:$LD_LIBRARY_PATH並且將/usr/local/mysql5.1/lib/mysql 放入/etc/ld.so.conf中/etc/ld.so.conf改後內容為:include ld.so.conf.d/*.conf/usr/local/mysql5.1/lib/mysql

7

ldconfig 最後重新再測試一下,就不會有上面的問題了

有資料庫基礎,如何快速精通mysql?

本周內容:455字

閱讀時間:3~5分鐘

前言

MySQL 是一款免費開源、小型、關係型資料庫管理系統。隨著該資料庫功能不斷完善、性能的不斷提高,可靠性不斷增強。它雖然是免費,但與其他商業資料庫一樣,具有資料庫系統的通用性,提供了資料庫的存取、增加、修改、刪除或更加複雜的操作。同時MySQL所使用的 SQL 語言是用於訪問資料庫的最常用標準化語言。MySQL 軟體採用了雙授權政策,分為社區版和商業版,由於其體積小、速度快、總體擁有成本低,尤其是開放源碼這一特點,一般中小型網站的開發都選擇 MySQL 作為網站資料庫。

下面開始介紹搭建的過程

一、準備環境

系統:

Centos 6.5_64

二、安裝過程

1.yum -y install mysql-server

2.設置服務開機啟動

3.啟動資料庫服務

4.設置MySQLroot用戶

5.設置root用戶密碼為

6.登錄資料庫

7.創建資料庫test1

8.建立資料庫表格,xm姓名,xb性別,csny出生年齡

9增加資料庫條目記錄,姓名:李一,性別:男年齡:1988.9.01

書籍推薦

《MySQL 5.7從入門到精通》

本書主要包括MySQL的安裝與配置、資料庫的創建、數據表的創建、數據類型和運算符、MySQL函數、查詢數據、數據表的操作(插入、更新與刪除數據)、索引、存儲過程和函數、視圖、觸發器、用戶管理、數據備份與恢復、日誌以及性能優化等。最後通過兩個綜合案例的資料庫設計,進一步講述MySQL在實際工作中的應用。

本書注重實戰操作,幫助讀者循序漸進地掌握MySQL中的各項技術。本書共有480個實例和14個綜合案例,還有大量的經典習題。下載文件中贈送了近20小時培訓班形式的視頻教學錄像,詳細講解了書中每一個知識點和每一個資料庫操作的方法和技巧。同時下載文件中還提供了本書所有例子的源代碼,讀者可以直接查看和調用。

本書適合MySQL資料庫初學者、MySQL資料庫開發人員和MySQL資料庫管理員,同時也能作為高等院校相關專業師生的教學用書。

讓閱讀成為習慣

面試官:MySQL許可權表損壞導致無法啟動怎麼辦?

一、背景

近期,公司RDS雲產品的MySQL Server版本進行升級,由目前使用的5.7.26版本升級到最新版本5.7.31;升級後測試同學發現:在MySQL創建用戶後,5.7.31版本重新啟動集群會出現啟動失敗的現象;而5.7.26版本在相同測試場景下是正常啟動的。這到底是為什麼呢?

二、問題復現

2.1 實驗環境

2.2 操作步驟

按照測試同學的測試步驟,首先創建一個用戶:

然後關閉mysqld;這裡需要介紹一下,我們集群的關閉方式是如下方式:

這種方式的內部實現類似於kill -9模式。所以我在線下環境使用kill -9的方式來複現,操作如下:

然後重啟mysqld,操作如下:

此時問題復現了,mysqld啟動失敗,我們查看了下error日誌,信息如下:

根據報錯信息可以看出:MySQL的許可權系統表發生了損壞,導致了mysqld啟動失敗;由於在MySQL 5.7及其之前版本該表是MyISAM引擎,且該引擎不支持事務,所以在mysqld異常崩潰會導致該類型引擎表的損壞;但在mysqld啟動時是有參數控制MyISAM引擎的恢復模式,且該參數在我們產品中也配置到了my.cnf中,如下所示:

2.3 參數解析

對於該參數的官方文檔的解釋如下:

設置MyISAM存儲引擎恢復模式。選項值是OFF、DEFAULT、BACKUP、FORCE或QUICK的值的任意組合。如果指定多個值,請用逗號分隔。指定不帶參數的選項與指定DEFAULT相同,指定顯式值” “將禁用恢復(與OFF值相同)。如果啟用了恢復,則mysqld每次打開MyISAM表時,都會檢查該表是否標記為已崩潰或未正確關閉。(只有在禁用外部鎖定的情況下運行,最後一個選項才起作用。)在這種情況下,mysqld在表上運行檢查。如果表已損壞,mysqld將嘗試對其進行修復。

伺服器自動修復表之前,它將有關修復的注釋寫到錯誤日誌中。如果您希望能夠在無需用戶干預的情況下從大多數問題中恢復,則應使用選項BACKUP,FORCE。即使某些行將被刪除,這也會強制修復表,但是它將舊的數據文件保留為備份,以便您以後可以檢查發生了什麼。

全局變數,只讀變數,默認為OFF。

三、問題修復

這類MySQL用戶表損耗的問題解決方式也是有多種,我這裡列舉其中一種:

(1)my.cnf中的[mysqld]標籤下添加skip_grant_tables,啟動時跳過載入系統字典。

(2)重啟mysqld,然後修復mysql schema下的所有表。

(3)在[mysqld]標籤下注釋或刪除掉skip_grant_tables,然後重啟mysqld。

此時mysqld是可以正常啟動的,無異常。

四、深入排查

在產品化中,以上修復方式很不優雅,只是作為臨時的解決方案;並且也存在一些令人疑惑的點:

帶著這些疑問,我們繼續排查出現該現象的原因;此時Google也沒有找到一些有效的信息,那麼只能通過MySQL源代碼來尋找一些答案。

首先需要下載mysql 5.7.31版本的源代碼,並搭建mysql debug環境;具體步驟可以自動Google搜索一下,本文就不再贅述了。

在源代碼中搜索一下關鍵詞,用於打斷點的位置,然後進行調試:

定位到相關代碼,大概是sql/mysqld.cc的4958行,且存在if條件判斷,此時我們開始調試:

通過以上調試信息,可以判斷出acl_init函數返回的值為真;此時我們查看該函數的代碼 (sql/auth/sql_auth_cache.cc:1365):

根據該函數的注釋發現:該函數是初始化負責用戶/資料庫級特權檢查的結構,並從mysql schema中的表中為其載入特權信息;且return值為1代表的是初始化許可權失敗。

此後開始逐步調試,觀察return相關信息,當調試到lock_table_names函數時,我們發現在Phase 3時return值為true,且根據代碼注釋發現true代表是Failure;具體代碼如下(sql/sql_base.cc:5549):

調試信息如下:

可以看到flags的值為0,而MYSQL_OPEN_SKIP_SCOPED_MDL_LOCK為宏定義值0x1000,與flags的值 做按位與操作,結果自然也是0,當然MYSQL_LOCK_IGNORE_GLOBAL_READ_ONLY也是如此;need_global_read_lock_protection是bool類型值,代表是否需要全局讀鎖的保護,這個值是在table- mdl_request.type不為MDL_SHARED_READ_ONLY發生改變;check_readonly函數相關信息 下面概述。

此時也查看了下MySQL 5.7.26版本代碼作為對比,發現lock_table_names函數下的Phase 3後的部分代 碼是在5.7.29版本後新增的。如果是git clone的MySQL代碼可以用git blame命令查詢文件變化的信息:

上述展示的信息中,最左側的列值為commit id為05824063和0405ebee,有興趣的同學可以詳細看下。

此功能解決的問題是 BUG#28438114: SET READ_ONLY=1 SOMETIMES DOESN’T BLOCK CONCURRENT DDL.;當然這個代碼的變更功能也在5.7 Release Notes中有所體現,如下所示( m/doc/relnotes/mysql/5.7/en/news-5-7-29.html ):

最後我們再查看下check_readonly函數,該函數是基於read_only和super_read_only狀態執行標準化檢查,是禁止(TRUE)還是允許(FALSE)操作。代碼如下(sql/auth/sql_authorization.cc:489):

此時第一反應就是去檢查my.cnf中是否包含read_only相關參數,檢查之後發現確實是使用了該參數, 如下:

此時注釋掉該參數,然後再次啟動mysqld,發現MyISAM表可以自動修復,且正常啟動;error log信息如下:

由於docker一些限制,我們在mysqld啟動會涉及兩次;所以解決該問題的方式為:第一次mysqld的啟動時先關閉read_only參數,第二次啟動時開啟read_only參數。之所以選擇默認開啟read_only參數, 是為了避免在mysqld啟動後,選主邏輯未完成時的保護措施;當然選主完成後,會自動對master執行 set global read_only=0 操作。

五、總結

六、附錄

調試的棧幀信息如下,有興趣的小夥伴可以研究下:

熟悉MySQL體系結構和innodb存儲引擎工作原理;以及MySQL備份恢復、複製、數據遷移等技術;專註於MySQL、MariaDB開源資料庫,喜好開源技術。

原文鏈接:

怎麼在linux下部署mysql 源碼部署安裝

查找以前是否安裝有mysql,使用下面命令:

rpm -qa|grep -i mysql

如果顯示有如下包則說明已安裝mysql

mysql-4.1.12-3.RHEL4.1

mysqlclient10-3.23.58-4.RHEL4.1

原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-tw/n/238408.html

(0)
打賞 微信掃一掃 微信掃一掃 支付寶掃一掃 支付寶掃一掃
小藍的頭像小藍
上一篇 2024-12-12 12:11
下一篇 2024-12-12 12:11

相關推薦

  • Java Bean載入過程

    Java Bean載入過程涉及到類載入器、反射機制和Java虛擬機的執行過程。在本文中,將從這三個方面詳細闡述Java Bean載入的過程。 一、類載入器 類載入器是Java虛擬機…

    編程 2025-04-29
  • Python 常用資料庫有哪些?

    在Python編程中,資料庫是不可或缺的一部分。隨著互聯網應用的不斷擴大,處理海量數據已成為一種趨勢。Python有許多成熟的資料庫管理系統,接下來我們將從多個方面介紹Python…

    編程 2025-04-29
  • g3log源代碼學習

    g3log是一個高性能C++日誌庫,其代碼十分精簡和可讀性強,本文將從3個方面詳細介紹g3log源代碼學習。 一、g3log源代碼整體架構 g3log的整體架構十分清晰,其中有3個…

    編程 2025-04-29
  • openeuler安裝資料庫方案

    本文將介紹在openeuler操作系統中安裝資料庫的方案,並提供代碼示例。 一、安裝MariaDB 下面介紹如何在openeuler中安裝MariaDB。 1、更新軟體源 sudo…

    編程 2025-04-29
  • 如何部署一個服務到一個環境

    本文將從多個方面對如何部署一個服務到一個環境進行詳細的闡述,包括環境準備、代碼編寫、打包部署等。 一、環境準備 1、確定部署環境的操作系統版本、運行時環境(如JDK、Node.js…

    編程 2025-04-29
  • Python開發環境包括

    Python作為一門高效、易讀易學的語言,已經被越來越多的開發者使用。而Python的開發環境也發展得越來越完善。本文將會從以下幾個方面對Python開發環境包括做詳細的闡述: 一…

    編程 2025-04-29
  • 資料庫第三範式會有刪除插入異常

    如果沒有正確設計資料庫,第三範式可能導致刪除和插入異常。以下是詳細解釋: 一、什麼是第三範式和範式理論? 範式理論是關係資料庫中的一個規範化過程。第三範式是範式理論中的一種常見形式…

    編程 2025-04-29
  • 內核驅動編譯環境代價分析

    內核驅動編譯環境是在Linux系統中編譯內核模塊的過程。本文通過分析內核驅動編譯環境的各個方面,包括編譯工具的選擇、編譯速度、編譯器選項等,來探討其代價所在,並提供一些優化的建議。…

    編程 2025-04-29
  • leveldb和unqlite:兩個高性能的資料庫存儲引擎

    本文將介紹兩款高性能的資料庫存儲引擎:leveldb和unqlite,並從多個方面對它們進行詳細的闡述。 一、leveldb:輕量級的鍵值存儲引擎 1、leveldb概述: lev…

    編程 2025-04-28
  • 如何使用cmd激活python虛擬環境

    Python虛擬環境是Python用來隔離項目所需包和依賴庫的工具,以免不同項目之間的依賴關係衝突。下面將從安裝虛擬環境、創建虛擬環境、激活虛擬環境這3個方面來詳細講解如何在cmd…

    編程 2025-04-28

發表回復

登錄後才能評論