1. 程式人生 > >centos7.4下原始碼安裝mariadb

centos7.4下原始碼安裝mariadb

一、解除安裝舊的mariadb 查詢已安裝的軟體: rpm -qa | grep Maria* 解除安裝:yum -y remove mari* 刪除資料庫檔案:rm -rf /var/lib/mysql/*

二、安裝依賴包且原始碼安裝cmake 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 可以去cmake 官網進行下載:

https://cmake.org/download/

四、準備目錄 這裡提前預定MariaDB的安裝目錄為/usr/local/mysql並且資料庫目錄為/data/mysql,這裡要建立系統使用者及組和資料庫存放目錄,並且將資料庫存放目錄賦予mysql使用者及組許可權,操作如下:(請注意特別說明一下:這裡說的資料庫目錄是指的具體資料庫儲存檔案, 而不是安裝檔案!) ----建立maria安裝目錄

mkdir -p /usr/local/mysql

----建立資料庫存放目錄

mkdir -p /data/mysql

或使用下面命令:

mkdir -pv /data/mysql/{data,logs/{binlog,relaylog}}

----建立使用者,目錄,設定許可權

groupadd mysql

useradd -s /sbin/nologin -g mysql -M mysql

----改變資料庫存放目錄所屬使用者及組為 mysql:mysql

chown mysql:mysql /data/mysql -R

以下是上面建立系統使用者mysql的各個引數說明: -r: 新增系統使用者( 這裡指將要被建立的系統使用者mysql ) -g: 指定要建立的使用者所屬組( 這裡指新增到新系統使用者mysql到mysql系統使用者組 ) -s: 新系統帳戶的登入shell( /sbin/nologin 這裡設定為將要被建立系統使用者mysql不能用來登入系統 ) -d: 新帳戶的主目錄( 這裡指定將要被建立的系統使用者mysql的家目錄為 /usr/local/mysql ) -M: 不要建立使用者的主目錄( 也就是說將要被建立的系統使用者mysql不會在 /home 目錄下建立 mysql 家目錄 )

tar zxvf mariadb-10.2.18.tar.gz

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__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 ‘[email protected] [email protected] mysqld_safe\nexport LD_PRELOAD=/usr/local/lib/[email protected]’ /usr/local/mysql/bin/mysqld_safe service mysqld restart

七、拷貝配置檔案並修改 在mariadb安裝目錄下的support-files有好幾種配置模板,已經配置好的部分引數,分別用於不同的環境,這裡簡要說明一下: my-small.cnf 這個是為小型資料庫或者個人測試使用的,不能用於生產環境 my-medium.cnf 這個適用於中等規模的資料庫,比如個人專案或者小型企業專案中 my-large.cnf 一般用於專門提供SQL服務的伺服器中,即專門執行資料庫服務的主機,配置要求要更高一些,適用於生產環境 my-huge.cnf 用於企業級伺服器中的資料庫服務,一般更多用於生產環境使用 所以根據以上幾個檔案,如果個人使用或者測試,那麼可以使用前兩個模板;企業伺服器或者64G以上的高配置伺服器可以使用後面兩個模板,另外也可以根據自己的需求來加大引數和擴充配置獲得更好的效能。

cp support-files/my-large.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}’

[client] port = 3306 socket = /tmp/mysql.sock [mysqld] 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 datadir = /data/mysql/ 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 [mysqldump] quick max_allowed_packet = 16M [mysql] no-auto-rehash [myisamchk] key_buffer_size = 128M sort_buffer_size = 128M read_buffer = 2M write_buffer = 2M [mysqlhotcopy] interactive-timeout

八、初始化mariadb,初始安全設定 1)、預設情況下,MariaDB安裝有一個匿名使用者,允許任何人登入MariaDB而他們無需建立使用者帳戶。這個目的是隻用於測試,安裝去更平緩一些。你應該在進入生產環境前刪除它們。 #mysql_secure_installation 2)、編譯安裝MariaDB後所有配置操作 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

九、設定自動啟動指令碼,啟動服務

cp support-files/mysql.server /etc/rc.d/init.d/mysqld //複製mysql服務程式 到系統目錄

chmod +x /etc/rc.d/init.d/mysqld //複製mysql服務程式到系統目錄

chkconfig --add mysqld //新增mysql 至系統服務並設定為開機啟動

/etc/init.d/mysqld restart //啟動mysql

啟動mariadb systemctl start mysqld

systemctl start mariadb #啟動

systemctl enable mariadb #設定開機自啟動

ps aux |grep mysqld |grep -v grep #檢視程序,mysqld_safe為啟動mysql的指令碼檔案,內部呼叫mysqld命令

十、新增環境變數

vim /etc/profile //編輯profile,將mysql的可執行路徑加入系統PATH export PATH=/usr/local/mysql/bin:KaTeX parse error: Expected 'EOF', got '#' at position 7: PATH [#̲export PATH=PATH:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin:/usr/local/mysql/bin] source /etc/profile //重讀環境變數,使PATH生效。

十一、檢查預設配置和執行情況 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 [email protected]’::1’; drop user [email protected]; select user,host,password from user; //再次檢視系統許可權,確保不安全的賬戶均被刪除。 flush privileges; //重新整理許可權 #show engines; #show VARIABLES like “character_set%”;