一涤伐、卸載舊的mariadb
查詢已安裝的軟件:
rpm -qa | grep Maria*
卸載:yum -y remove mari*
刪除數(shù)據(jù)庫(kù)文件:rm -rf /var/lib/mysql/*
二、安裝依賴包
yum groupinstall "Development Tools"
yum install libaio libaio-devel bison bison-devel zlib-devel cmake openssl openssl-devel ncurses ncurses-devel libcurl-devel libarchive-devel boost boost-devel lsof wget
https://cmake.org/download/ //cmake 也可以去官網(wǎng)進(jìn)行下載漓骚,源碼安裝
三戏罢、下載和編譯jemalloc
cd /usr/local/src
wget https://github.com/jemalloc/jemalloc/releases/download/4.3.1/jemalloc-4.3.1.tar.bz2
tar jxvf jemalloc-4.3.1.tar.bz2
cd jemalloc-4.3.1
./configure &&make && make install
四、準(zhǔn)備目錄
這里提前預(yù)定MariaDB的安裝目錄為/usr/local/mysql并且數(shù)據(jù)庫(kù)目錄為/data/mysql,這里要建立系統(tǒng)用戶及組和數(shù)據(jù)庫(kù)存放目錄覆积,并且將數(shù)據(jù)庫(kù)存放目錄賦予mysql用戶及組權(quán)限,操作如下:(請(qǐng)注意特別說(shuō)明一下:這里說(shuō)的數(shù)據(jù)庫(kù)目錄是指的具體數(shù)據(jù)庫(kù)存儲(chǔ)文件,
而不是安裝文件!)
# mkdir -p /usr/local/mysql //創(chuàng)建maria安裝目錄
# mkdir -p /data/mysql //創(chuàng)建數(shù)據(jù)庫(kù)存放目錄 或使用下面命令:# mkdir -pv /data/mysql/{data,logs/{binlog,relaylog}}
# groupadd mysql //建立用戶熟呛,目錄宽档,設(shè)置權(quán)限
# useradd -s /sbin/nologin -g mysql -M mysql
# chown mysql:mysql /data/mysql -R //改變數(shù)據(jù)庫(kù)存放目錄所屬用戶及組為 mysql:mysql
以下是上面創(chuàng)建系統(tǒng)用戶mysql的各個(gè)參數(shù)說(shuō)明:
-r: 添加系統(tǒng)用戶( 這里指將要被創(chuàng)建的系統(tǒng)用戶mysql )
-g: 指定要?jiǎng)?chuàng)建的用戶所屬組( 這里指添加到新系統(tǒng)用戶mysql到mysql系統(tǒng)用戶組 )
-s: 新系統(tǒng)帳戶的登錄shell( /sbin/nologin 這里設(shè)置為將要被創(chuàng)建系統(tǒng)用戶mysql不能用來(lái)登錄系統(tǒng) )
-d: 新帳戶的主目錄( 這里指定將要被創(chuàng)建的系統(tǒng)用戶mysql的家目錄為 /usr/local/mysql )
-M: 不要?jiǎng)?chuàng)建用戶的主目錄( 也就是說(shuō)將要被創(chuàng)建的系統(tǒng)用戶mysql不會(huì)在 /home 目錄下創(chuàng)建 mysql 家目錄 )
五、下載庵朝、解壓并編譯安裝
#tar xvf mariadb-10.2.18.tar.gz
#chown -R root:mysql /usr/local/mysql/ //修改目錄的權(quán)限吗冤,讓mysql 用戶具有全部最高權(quán)限又厉。
查看一下 解壓后的目錄內(nèi)一共都包含哪些內(nèi)容:
bin: 可執(zhí)行的二進(jìn)制程序的存放目錄,客戶端程序mysql就位于這個(gè)目錄下椎瘟。
data:默認(rèn)的數(shù)據(jù)庫(kù)存放目錄覆致,如果我們一開始沒(méi)有指定數(shù)據(jù)庫(kù)存放目錄的話,那就會(huì)被存儲(chǔ)到這個(gè)位置肺蔚。
include:MariaDB 所需要的一些程序文件
INSTALL-BINARY: 安裝幫助文檔篷朵,可以詳細(xì)閱讀,對(duì)安裝數(shù)據(jù)庫(kù)有很大的幫助
lib: 軟件運(yùn)行所需要的庫(kù)文件
man:軟件的幫助文檔mysql-test: 數(shù)據(jù)庫(kù)的測(cè)試組件scipts:mysql初始化初始化時(shí)要用到的腳本文件婆排,通讀一下腳本声旺,可以了解Mysql 的安裝過(guò)程
share: 共享的文件內(nèi)容
support-files: mysql 正常運(yùn)行所需要的配置文件或者文檔,這一點(diǎn)很重要段只,如果我們要自定義配置文件的話腮猖,就需要參考這里面的配置文件來(lái)進(jìn)行定義。
這里有一點(diǎn)需要注意:data目錄是數(shù)據(jù)庫(kù)的存放路徑赞枕,我們?cè)谥耙呀?jīng)手動(dòng)指定澈缺。在實(shí)際生產(chǎn)中,企業(yè)數(shù)據(jù)增長(zhǎng)很快炕婶,數(shù)據(jù)庫(kù)文件有可能會(huì)很大姐赡,因此最好將該目錄指定到一個(gè)單獨(dú)的磁盤上,或者大分區(qū)柠掂,或者使用邏輯卷都可以项滑,避免因物理空間不足,導(dǎo)致出現(xiàn)故障涯贞。
# cd mariadb-10.2.18
cmake
. -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc -DWITHOUT_TOKUDB=1 -DWITH_INNOBASE_STORAGE_ENGINE=1
-DWITH_ARCHIVE_STPRAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1
-DWIYH_READLINE=1 -DWIYH_SSL=system -DVITH_ZLIB=system -DWITH_LOBWRAP=0
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
編譯參數(shù)說(shuō)明:
-DCMAKE_INSTALL_PREFIX是指定安裝的位置枪狂,這里是/usr/local/mysql //安裝根目錄-DMYSQL_DATADIR是指定MySQL的數(shù)據(jù)目錄,這里是/data/mysql //數(shù)據(jù)存儲(chǔ)目錄
-DSYSCONFDIR是指定配置文件所在的目錄宋渔,一般都是/etc州疾,具體的配置文件是/etc/my.cnf, //配置文件(my.cnf)目錄
-DWITHOUT_TOKUDB=1這個(gè)參數(shù)一般都要設(shè)置上,表示不安裝tokudb引擎皇拣,tokudb是MySQL中一款開源的存儲(chǔ)引擎严蓖,可以管理大量數(shù)據(jù)并且有一些新的特性,這些是Innodb所不具備的氧急,這里之所以不安裝颗胡,是因?yàn)橐话阌?jì)算機(jī)默認(rèn)是沒(méi)有Percona
Server的,并且加載tokudb還要依賴jemalloc內(nèi)存優(yōu)化态蒂,一般開發(fā)中也是不用tokudb的杭措,所以暫時(shí)屏蔽掉费什,否則在系統(tǒng)中找不到依賴會(huì)出現(xiàn):CMake
Error at
storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:179
(message)這樣的錯(cuò)誤
-DDEFAULT_CHARSET 字符集,這里是utf-8 //默認(rèn)字符集 -DDEFAULT_COLLATION排序規(guī)則,這里是utf8_general_ci //默認(rèn)字符校對(duì)
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
//UNIX socket文件 -DMYSQL_TCP_PORT=3306
//TCP/IP端口-DWITH_ARCHIVE_STORAGE_ENGINE=1 // ARCHIVE 引擎支持
-DWITH_ARIA_STORAGE_ENGINE=1 //ARIA 引擎支持
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 // BLACKHOLE 引擎支持 -DWITH_FEDERATEDX_STORAGE_ENGINE=1 //FEDERATEDX 引擎支持
-DWITH_PARTITION_STORAGE_ENGINE=1 //PARTITION 引擎支持 -DWITH_PERFSCHEMA_STORAGE_ENGINE=1 // PERFSCHEMA 引擎支持
-DWITH_SPHINX_STORAGE_ENGINE=1
// SPHINX 引擎支持 -DWITH_XTRADB_STORAGE_ENGINE=1 // XTRADB
支持-DWITH_INNOBASE_STORAGE_ENGINE=1 // innoDB 引擎支持
-DWITH_MYISAM_STORAGE_ENGINE=1 // Myisam 引擎支持
-DWITH_READLINE=1
//readline庫(kù) -DENABLED_LOCAL_INFILE=1
//啟用加載本地?cái)?shù)據(jù)-DWITH_EXTRA_CHARSETS=all //擴(kuò)展支持編碼 ( all | utf8,gbk,gb2312 |
none ) -DEXTRA_CHARSETS=all //擴(kuò)展字符支持
-DWITH_SSL=system
//系統(tǒng)傳輸使用SSL加密 -DWITH_ZLIB=system //系統(tǒng)傳輸使用zlib壓縮钾恢,節(jié)約帶寬-DWITH_LIBWRAP=0
//libwrap庫(kù) -DMYSQL_USER=mysql //運(yùn)行用戶-DWITH_DEBUG=0 //調(diào)試模式 編譯引擎選項(xiàng)說(shuō)明
默認(rèn)編譯的存儲(chǔ)引擎包括:csv手素、myisam、myisammrg和heap瘩蚪。若要安裝其它存儲(chǔ)引擎泉懦,可以使用類似如下編譯選項(xiàng):
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1
若要明確指定不編譯某存儲(chǔ)引擎,可以使用類似如下的選項(xiàng):
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
注意:
1)如果上面make需要修改參數(shù)疹瘦,重新編譯, 可以刪除原來(lái)本目錄下的CMakeCache.txt
mv CMakeCache.txt CMakeCache.txt.bak
# rm -f CMakeCache.txt
make && make install
六崩哩、使用jemalloc優(yōu)化mariadb
使用jemalloc優(yōu)化MaridDB編譯方法,cmake預(yù)編譯時(shí)加上下面參數(shù)
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
或者直接加載言沐,修改mysqld_safe邓嘹,運(yùn)行命令:
sed
-i 's@executing mysqld_safe@executing mysqld_safe\nexport
LD_PRELOAD=/usr/local/lib/libjemalloc.so@'
/usr/local/mysql/bin/mysqld_safe
service mysqld restart
七、準(zhǔn)備配置文件
MariaDB 的配置文件可以存放在多個(gè)路徑下面险胰。但是配置文件的查找次序是固定的汹押。這樣也就導(dǎo)致了,配置文件具有了優(yōu)先級(jí)起便,后面的配置會(huì)覆蓋掉前面的配置(配置參數(shù)相同的情況下)棚贾。
在mariadb安裝目錄下的support-files有好幾種配置模板,已經(jīng)配置好的部分參數(shù)榆综,分別用于不同的環(huán)境妙痹,這里簡(jiǎn)要說(shuō)明一下:
my-small.cnf 這個(gè)是為小型數(shù)據(jù)庫(kù)或者個(gè)人測(cè)試使用的,不能用于生產(chǎn)環(huán)境
my-medium.cnf 這個(gè)適用于中等規(guī)模的數(shù)據(jù)庫(kù)鼻疮,比如個(gè)人項(xiàng)目或者小型企業(yè)項(xiàng)目中
my-large.cnf 一般用于專門提供SQL服務(wù)的服務(wù)器中怯伊,即專門運(yùn)行數(shù)據(jù)庫(kù)服務(wù)的主機(jī),配置要求要更高一些判沟,適用于生產(chǎn)環(huán)境
my-huge.cnf 用于企業(yè)級(jí)服務(wù)器中的數(shù)據(jù)庫(kù)服務(wù)震贵,一般更多用于生產(chǎn)環(huán)境使用
所以根據(jù)以上幾個(gè)文件,如果個(gè)人使用或者測(cè)試水评,那么可以使用前兩個(gè)模板猩系;企業(yè)服務(wù)器或者64G以上的高配置服務(wù)器可以使用后面兩個(gè)模板,另外也可以根據(jù)自己的需求來(lái)加大參數(shù)和擴(kuò)充配置獲得更好的性能中燥。
# [root@localhost mysql]#cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
然后在這個(gè)配置文件中寇甸,加入我們剛剛的指定的一些目錄和信息。
vim /etc/my.cnf
增加如下:
datadir = /data/mysq/ //指定數(shù)據(jù)庫(kù)存儲(chǔ)的路徑
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON //將每個(gè)表都單獨(dú)的存儲(chǔ)到一個(gè)文件中
skip_name_resolve = ON //禁止主機(jī)名解析
注意:查看配置文件當(dāng)前有效配置如下
# sed -e "s/#.*//g" /etc/my.cnf | awk '{if (length !=0) print $0}'
..........
port = 3306 socket = /tmp/mysql.sock
skip-external-locking?
innodb_file_per_table = ON
skip_name_resolve = ON
八疗涉、創(chuàng)建數(shù)據(jù)庫(kù)文件拿霉,初始化mariadb,初始安全設(shè)置
默認(rèn)情況下,MariaDB安裝有一個(gè)匿名用戶,允許任何人登錄MariaDB而他們無(wú)需創(chuàng)建用戶帳戶咱扣。這個(gè)目的是只用于測(cè)試绽淘,安裝時(shí)更平緩一些。你應(yīng)該在進(jìn)入生產(chǎn)環(huán)境前刪除它們闹伪。
mysql_secure_installation //安全初始化
已經(jīng)能夠順利的訪問(wèn)到數(shù)據(jù)了沪铭,甚至匿名訪問(wèn)也是的壮池。可是此時(shí)的數(shù)據(jù)庫(kù)還是不足夠安全的杀怠,并不能投入到實(shí)際的生產(chǎn)中使用椰憋,所以我們需要對(duì)數(shù)據(jù)庫(kù)進(jìn)行安全初始化,在創(chuàng)建數(shù)據(jù)庫(kù)的同時(shí)指定數(shù)據(jù)庫(kù)存放目錄以及默認(rèn)用戶赔退。
cd /usr/local/mysql
#./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql --defaults-file=/etc/my.cnf
出現(xiàn)下列信息
To start mysqld at boot time you have to copy support-files/mysql.server to the right place for your system
PLEASE REMEMBER TO SET A PASSWORD FOR THE MariaDB root USER !
To do so, start the server, then issue the following commands:
'/usr/local/mysql//bin/mysqladmin' -u root password 'new-password'
'/usr/local/mysql//bin/mysqladmin' -u root -h Anwar01 password 'new-password'
Alternatively you can run: '/usr/local/mysql//bin/mysql_secure_installation'
which will also give you the option of removing the test databases and
anonymous user created by default. This is strongly recommended for
production servers. You can start the MariaDB daemon with: cd
'/usr/local/mysql/' ; /usr/local/mysql//bin/mysqld_safe
--datadir='/data/mysql'
You can test the MariaDB daemon with mysql-test-run.pl
cd '/usr/local/mysql//mysql-test' ; perl mysql-test-run.pl
查看初始化結(jié)果:
# ll /data/mysql
切換到我們指定的數(shù)據(jù)庫(kù)存放路徑下面橙依,可以看到一些相關(guān)文件。這里面的每一個(gè)路徑就是一個(gè)數(shù)據(jù)庫(kù)硕旗。
九窗骑、準(zhǔn)備日志文件
因?yàn)镃entOS 6 和CentOS 7 的日志路徑有所不同,所以創(chuàng)建的日志文件的路徑也是不一樣的漆枚。CentOS6 中是/var/log/mysqld.log,而CentOS 7 中則是 /var/log/mariadb/mariadb.log
[root@localhost mysql]#mkdir /var/log/mariadb //創(chuàng)建文件路徑
[root@localhost mysql] /var/log/mariadb/mariadb.log //創(chuàng)建日志文件
[root@localhost mysql]#chown mysql /var/log/mariadb/mariadb.log //修改文件權(quán)限
十慧域、配置客戶端環(huán)境變量
完成了前面的幾步操作,我們就已經(jīng)完成了大部分的工作浪读,此時(shí)服務(wù)已經(jīng)啟動(dòng)昔榴,我們可以使用ss
工具來(lái)查看3306端口是否已經(jīng)開啟。但是此時(shí)碘橘,我們使用mysql 命令通過(guò)客戶端去訪問(wèn)mysql數(shù)據(jù)庫(kù)的話互订,會(huì)提示找不到mysql
命令,所以我們要指定一下痘拆,mysql 命令的環(huán)境變量仰禽。
mysql解壓之后一些二進(jìn)制的可執(zhí)行文件位于 解壓后目錄的/bin文件夾下,所以我們將這個(gè)路徑添加到環(huán)境變量中纺蛆。
vim /etc/profile //編輯profile,將mysql的可執(zhí)行路徑加入系統(tǒng)PATH
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile //重讀環(huán)境變量,使PATH生效吐葵。
十一、設(shè)置自動(dòng)啟動(dòng)腳本并啟動(dòng)服務(wù)
將mysql的服務(wù)腳本復(fù)制到服務(wù)目錄下桥氏。因?yàn)镃entOS7 與低版本的服務(wù)兼容温峭,所以我們就直接將腳本復(fù)制到/etc/init.d/目錄下就好。
復(fù)制mysql的腳本到服務(wù)目錄下
[root@localhost mysql]#cp support-files/mysql.server /etc/rc.d/init.d/mysqld // //復(fù)制mysql服務(wù)程序 到系統(tǒng)目錄
# chkconfig --add mysqld
[root@localhost mysql]#chkconfig --add mysqld //將mysql的服務(wù)添加到開機(jī)啟動(dòng)中并設(shè)置為開機(jī)啟動(dòng)
[root@localhost mysql]#chkconfig --list
[root@localhost mysql]#service mysqld start // 啟動(dòng)MySQL 服務(wù)
Starting mysqld (via systemctl): [ OK ]
如果我們沒(méi)有指定日志文件或者指定了日志文件字支,但是忘記修改權(quán)限的話凤藏,這一步都會(huì)出錯(cuò)的,不過(guò)出錯(cuò)了也不要著急堕伪,根據(jù)提示信息一點(diǎn)一點(diǎn)來(lái)修改就可以了揖庄。我們?cè)谶@一步中將mysql的服務(wù)腳本復(fù)制到了/etc/rc.d/init.d/路徑下,這是因?yàn)镃entOS
7兼容了CentOS 6 的服務(wù)模式欠雌。當(dāng)然也可以按照CentOS
7的服務(wù)管理方式來(lái)進(jìn)行蹄梢,配置文件位于/usr/lib/systemd/system 路徑下。
systemctl start mysqld
# systemctl start mariadb#啟動(dòng)
# systemctl enable mariadb#設(shè)置開機(jī)自啟動(dòng)
# ps aux |grep mysqld |grep -v grep#查看進(jìn)程富俄,mysqld_safe為啟動(dòng)mysql的腳本文件禁炒,內(nèi)部調(diào)用mysqld命令
十二而咆、檢查默認(rèn)配置和運(yùn)行情況
mysqld --print-defaults
信息顯示如下:
mysqld would have been started with the following arguments:
--port=3306
--socket=/tmp/mysql.sock --skip-external-locking --key_buffer_size=256M
--max_allowed_packet=1M --table_open_cache=256 --sort_buffer_size=1M
--read_buffer_size=1M --read_rnd_buffer_size=4M
--myisam_sort_buffer_size=64M --thread_cache_size=8
--query_cache_size=16M --thread_concurrency=8 --log-bin=mysql-bin
--binlog_format=mixed --server-id=1 --innodb_data_home_dir=/data/mysql
--innodb_data_file_path=ibdata1:10M:autoextend
--innodb_log_group_home_dir=/data/mysql --innodb_buffer_pool_size=256M
--innodb_log_file_size=64M --innodb_log_buffer_size=8M
--innodb_flush_log_at_trx_commit=2 --innodb_lock_wait_timeout=50
--innodb_file_per_table=ON --skip_name_resolve=ON
#ss -tlnp|grep :3306
#lsof |grep jemalloc
十三、初始化數(shù)據(jù)庫(kù)用戶表齐苛,連接mariadb使用
原始狀態(tài)下翘盖,管理員root桂塞,密碼為空凹蜂,默認(rèn)只允許從本機(jī)登錄localhost
mysqladmin -u root password 'yourpassword' //設(shè)定root賬號(hào)及密碼,由于原密碼為空,因此-p可以不用
mysql -u root -p //使用root用戶登錄
mysql use mysql //切換至mysql數(shù)據(jù)庫(kù)。
select user,host,password from user; //查看系統(tǒng)權(quán)限
drop user ''@'localhost'; //刪除不安全的賬戶
drop user root@'::1'; drop user root@127.0.0.1; select user,host,password from user; //再次查看系統(tǒng)權(quán)限阁危,確保不安全的賬戶均被刪除玛痊。
flush privileges; //刷新權(quán)限
#show engines;
#show VARIABLES like "character_set%";