一、卸載舊的mariadb
查詢已安裝的軟件:
rpm -qa | grep Maria*
卸載:yum -y remove mari*
刪除數據庫文件: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 也可以去官網進行下載,源碼安裝
三、下載和編譯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
四、準備目錄
這里提前預定MariaDB的安裝目錄為/usr/local/mysql并且數據庫目錄為/data/mysql,這里要建立系統用戶及組和數據庫存放目錄,并且將數據庫存放目錄賦予mysql用戶及組權限,操作如下:(請注意特別說明一下:這里說的數據庫目錄是指的具體數據庫存儲文件,
而不是安裝文件!)
# mkdir -p /usr/local/mysql //創建maria安裝目錄
# mkdir -p /data/mysql //創建數據庫存放目錄 或使用下面命令:# mkdir -pv /data/mysql/{data,logs/{binlog,relaylog}}
# groupadd mysql //建立用戶,目錄,設置權限
# useradd -s /sbin/nologin -g mysql -M mysql
# chown mysql:mysql /data/mysql -R //改變數據庫存放目錄所屬用戶及組為 mysql:mysql
以下是上面創建系統用戶mysql的各個參數說明:
-r: 添加系統用戶( 這里指將要被創建的系統用戶mysql )
-g: 指定要創建的用戶所屬組( 這里指添加到新系統用戶mysql到mysql系統用戶組 )
-s: 新系統帳戶的登錄shell( /sbin/nologin 這里設置為將要被創建系統用戶mysql不能用來登錄系統 )
-d: 新帳戶的主目錄( 這里指定將要被創建的系統用戶mysql的家目錄為 /usr/local/mysql )
-M: 不要創建用戶的主目錄( 也就是說將要被創建的系統用戶mysql不會在 /home 目錄下創建 mysql 家目錄 )
五、下載、解壓并編譯安裝
#tar xvf mariadb-10.2.18.tar.gz
#chown -R root:mysql /usr/local/mysql/ //修改目錄的權限,讓mysql 用戶具有全部最高權限。
查看一下 解壓后的目錄內一共都包含哪些內容:
bin: 可執行的二進制程序的存放目錄,客戶端程序mysql就位于這個目錄下。
data:默認的數據庫存放目錄,如果我們一開始沒有指定數據庫存放目錄的話,那就會被存儲到這個位置。
include:MariaDB 所需要的一些程序文件
INSTALL-BINARY: 安裝幫助文檔,可以詳細閱讀,對安裝數據庫有很大的幫助
lib: 軟件運行所需要的庫文件
man:軟件的幫助文檔mysql-test: 數據庫的測試組件scipts:mysql初始化初始化時要用到的腳本文件,通讀一下腳本,可以了解Mysql 的安裝過程
share: 共享的文件內容
support-files: mysql 正常運行所需要的配置文件或者文檔,這一點很重要,如果我們要自定義配置文件的話,就需要參考這里面的配置文件來進行定義。
這里有一點需要注意:data目錄是數據庫的存放路徑,我們在之前已經手動指定。在實際生產中,企業數據增長很快,數據庫文件有可能會很大,因此最好將該目錄指定到一個單獨的磁盤上,或者大分區,或者使用邏輯卷都可以,避免因物理空間不足,導致出現故障。
# 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
編譯參數說明:
-DCMAKE_INSTALL_PREFIX是指定安裝的位置,這里是/usr/local/mysql //安裝根目錄-DMYSQL_DATADIR是指定MySQL的數據目錄,這里是/data/mysql //數據存儲目錄
-DSYSCONFDIR是指定配置文件所在的目錄,一般都是/etc,具體的配置文件是/etc/my.cnf, //配置文件(my.cnf)目錄
-DWITHOUT_TOKUDB=1這個參數一般都要設置上,表示不安裝tokudb引擎,tokudb是MySQL中一款開源的存儲引擎,可以管理大量數據并且有一些新的特性,這些是Innodb所不具備的,這里之所以不安裝,是因為一般計算機默認是沒有Percona
Server的,并且加載tokudb還要依賴jemalloc內存優化,一般開發中也是不用tokudb的,所以暫時屏蔽掉,否則在系統中找不到依賴會出現:CMake
Error at
storage/tokudb/PerconaFT/cmake_modules/TokuSetupCompiler.cmake:179
(message)這樣的錯誤
-DDEFAULT_CHARSET 字符集,這里是utf-8 //默認字符集 -DDEFAULT_COLLATION排序規則,這里是utf8_general_ci //默認字符校對
-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庫 -DENABLED_LOCAL_INFILE=1
//啟用加載本地數據-DWITH_EXTRA_CHARSETS=all //擴展支持編碼 ( all | utf8,gbk,gb2312 |
none ) -DEXTRA_CHARSETS=all //擴展字符支持
-DWITH_SSL=system
//系統傳輸使用SSL加密 -DWITH_ZLIB=system //系統傳輸使用zlib壓縮,節約帶寬-DWITH_LIBWRAP=0
//libwrap庫 -DMYSQL_USER=mysql //運行用戶-DWITH_DEBUG=0 //調試模式 編譯引擎選項說明
默認編譯的存儲引擎包括:csv、myisam、myisammrg和heap。若要安裝其它存儲引擎,可以使用類似如下編譯選項:
-DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_FEDERATED_STORAGE_ENGINE=1
若要明確指定不編譯某存儲引擎,可以使用類似如下的選項:
-DWITHOUT_<ENGINE>_STORAGE_ENGINE=1
比如:
-DWITHOUT_EXAMPLE_STORAGE_ENGINE=1 -DWITHOUT_FEDERATED_STORAGE_ENGINE=1
-DWITHOUT_PARTITION_STORAGE_ENGINE=1
注意:
1)如果上面make需要修改參數,重新編譯, 可以刪除原來本目錄下的CMakeCache.txt
mv CMakeCache.txt CMakeCache.txt.bak
# rm -f CMakeCache.txt
make && make install
六、使用jemalloc優化mariadb
使用jemalloc優化MaridDB編譯方法,cmake預編譯時加上下面參數
-DCMAKE_EXE_LINKER_FLAGS="-ljemalloc" -DWITH_SAFEMALLOC=OFF
或者直接加載,修改mysqld_safe,運行命令:
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
七、準備配置文件
MariaDB 的配置文件可以存放在多個路徑下面。但是配置文件的查找次序是固定的。這樣也就導致了,配置文件具有了優先級,后面的配置會覆蓋掉前面的配置(配置參數相同的情況下)。
在mariadb安裝目錄下的support-files有好幾種配置模板,已經配置好的部分參數,分別用于不同的環境,這里簡要說明一下:
my-small.cnf 這個是為小型數據庫或者個人測試使用的,不能用于生產環境
my-medium.cnf 這個適用于中等規模的數據庫,比如個人項目或者小型企業項目中
my-large.cnf 一般用于專門提供SQL服務的服務器中,即專門運行數據庫服務的主機,配置要求要更高一些,適用于生產環境
my-huge.cnf 用于企業級服務器中的數據庫服務,一般更多用于生產環境使用
所以根據以上幾個文件,如果個人使用或者測試,那么可以使用前兩個模板;企業服務器或者64G以上的高配置服務器可以使用后面兩個模板,另外也可以根據自己的需求來加大參數和擴充配置獲得更好的性能。
# [root@localhost mysql]#cp /usr/local/mysql/support-files/my-huge.cnf /etc/my.cnf
然后在這個配置文件中,加入我們剛剛的指定的一些目錄和信息。
vim /etc/my.cnf
增加如下:
datadir = /data/mysq/ //指定數據庫存儲的路徑
innodb_flush_log_at_trx_commit = 2
innodb_file_per_table = ON //將每個表都單獨的存儲到一個文件中
skip_name_resolve = ON //禁止主機名解析
注意:查看配置文件當前有效配置如下
# 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
八、創建數據庫文件,初始化mariadb,初始安全設置
默認情況下,MariaDB安裝有一個匿名用戶,允許任何人登錄MariaDB而他們無需創建用戶帳戶。這個目的是只用于測試,安裝時更平緩一些。你應該在進入生產環境前刪除它們。
mysql_secure_installation //安全初始化
已經能夠順利的訪問到數據了,甚至匿名訪問也是的??墒谴藭r的數據庫還是不足夠安全的,并不能投入到實際的生產中使用,所以我們需要對數據庫進行安全初始化,在創建數據庫的同時指定數據庫存放目錄以及默認用戶。
cd /usr/local/mysql
#./scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql/ --datadir=/data/mysql --defaults-file=/etc/my.cnf
出現下列信息
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
查看初始化結果:
# ll /data/mysql
切換到我們指定的數據庫存放路徑下面,可以看到一些相關文件。這里面的每一個路徑就是一個數據庫。
九、準備日志文件
因為CentOS 6 和CentOS 7 的日志路徑有所不同,所以創建的日志文件的路徑也是不一樣的。CentOS6 中是/var/log/mysqld.log,而CentOS 7 中則是 /var/log/mariadb/mariadb.log
[root@localhost mysql]#mkdir /var/log/mariadb //創建文件路徑
[root@localhost mysql] /var/log/mariadb/mariadb.log //創建日志文件
[root@localhost mysql]#chown mysql /var/log/mariadb/mariadb.log //修改文件權限
十、配置客戶端環境變量
完成了前面的幾步操作,我們就已經完成了大部分的工作,此時服務已經啟動,我們可以使用ss
工具來查看3306端口是否已經開啟。但是此時,我們使用mysql 命令通過客戶端去訪問mysql數據庫的話,會提示找不到mysql
命令,所以我們要指定一下,mysql 命令的環境變量。
mysql解壓之后一些二進制的可執行文件位于 解壓后目錄的/bin文件夾下,所以我們將這個路徑添加到環境變量中。
vim /etc/profile //編輯profile,將mysql的可執行路徑加入系統PATH
export PATH=/usr/local/mysql/bin:$PATH
source /etc/profile //重讀環境變量,使PATH生效。
十一、設置自動啟動腳本并啟動服務
將mysql的服務腳本復制到服務目錄下。因為CentOS7 與低版本的服務兼容,所以我們就直接將腳本復制到/etc/init.d/目錄下就好。
復制mysql的腳本到服務目錄下
[root@localhost mysql]#cp support-files/mysql.server /etc/rc.d/init.d/mysqld // //復制mysql服務程序 到系統目錄
# chkconfig --add mysqld
[root@localhost mysql]#chkconfig --add mysqld //將mysql的服務添加到開機啟動中并設置為開機啟動
[root@localhost mysql]#chkconfig --list
[root@localhost mysql]#service mysqld start // 啟動MySQL 服務
Starting mysqld (via systemctl): [ OK ]
如果我們沒有指定日志文件或者指定了日志文件,但是忘記修改權限的話,這一步都會出錯的,不過出錯了也不要著急,根據提示信息一點一點來修改就可以了。我們在這一步中將mysql的服務腳本復制到了/etc/rc.d/init.d/路徑下,這是因為CentOS
7兼容了CentOS 6 的服務模式。當然也可以按照CentOS
7的服務管理方式來進行,配置文件位于/usr/lib/systemd/system 路徑下。
systemctl start mysqld
# systemctl start mariadb#啟動
# systemctl enable mariadb#設置開機自啟動
# ps aux |grep mysqld |grep -v grep#查看進程,mysqld_safe為啟動mysql的腳本文件,內部調用mysqld命令
十二、檢查默認配置和運行情況
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
十三、初始化數據庫用戶表,連接mariadb使用
原始狀態下,管理員root,密碼為空,默認只允許從本機登錄localhost
mysqladmin -u root password 'yourpassword' //設定root賬號及密碼,由于原密碼為空,因此-p可以不用
mysql -u root -p //使用root用戶登錄
mysql use mysql //切換至mysql數據庫。
select user,host,password from user; //查看系統權限
drop user ''@'localhost'; //刪除不安全的賬戶
drop user root@'::1'; drop user root@127.0.0.1; select user,host,password from user; //再次查看系統權限,確保不安全的賬戶均被刪除。
flush privileges; //刷新權限
#show engines;
#show VARIABLES like "character_set%";