1、卸載舊的mariadb
查詢已安裝的軟件:
rpm -qa | grep Maria*
卸載:yum -y remove mari*
刪除數據庫文件:rm -rf /var/lib/mysql/*
2、安裝依賴包
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
3、下載和編譯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
4、準備目錄
這裏提早預約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 家目錄 )
5、下載、解壓並編譯安裝
#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
6、使用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
7、準備配置文件
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
8、建立數據庫文件,初始化mariadb,初始安全設置
默認狀況下,MariaDB安裝有一個匿名用戶,容許任何人登陸MariaDB而他們無需建立用戶賬戶。這個目的是隻用於測試,安裝時更平緩一些。你應該在進入生產環境前刪除它們。
mysql_secure_installation //安全初始化
已經可以順利的訪問到數據了,甚至匿名訪問也是的。但是此時的數據庫仍是不足夠安全的,並不能投入到實際的生產中使用,因此咱們須要對數據庫進行安全初始化,在建立數據庫的同時指定數據庫存放目錄以及默認用戶。
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
切換到咱們指定的數據庫存放路徑下面,能夠看到一些相關文件。這裏面的每個路徑就是一個數據庫。
9、準備日誌文件
由於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 //修改文件權限
10、配置客戶端環境變量
完成了前面的幾步操做,咱們就已經完成了大部分的工做,此時服務已經啓動,咱們可使用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生效。
11、設置自動啓動腳本並啓動服務
將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命令
12、檢查默認配置和運行狀況
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
十3、初始化數據庫用戶表,鏈接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%";