預備知識:
MySQL/MariaDB的源碼編譯需要藉助於:cmake:
cmake的重要特性之一是其獨立於源碼(out-of-source)的編譯功能,即編譯工作可以在另一個指定的目錄中
而非源碼目錄中進行,這可以保證源碼目錄不受任何一次編譯的影響,因此在同一個源碼樹上可以進行多次
不同的編譯,如針對於不同平臺編譯。
cmake基礎簡介:
使用cmake編譯mariadb-5.5
cmake指定編譯選項的方式不同於make,其實現方式對比如下:
./configure cmake .
./configure --help cmake . -LH or ccmake .
指定安裝文件的安裝路徑時常用的選項:
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql
-DMYSQL_DATADIR=/data/mysql
-DSYSCONFDIR=/etc
默認編譯的存儲引擎包括: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
如若要編譯進其它功能,如SSL等,則可使用類似如下選項來實現編譯時使用某庫或不使用某庫:
-DWITH_READLINE=1
-DWITH_SSL=system
-DWITH_ZLIB=system
-DWITH_LIBWRAP=0
其它常用的選項:
-DMYSQL_TCP_PORT=3306
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock
-DENABLED_LOCAL_INFILE=1
-DEXTRA_CHARSETS=all
-DDEFAULT_CHARSET=utf8
-DDEFAULT_COLLATION=utf8_general_ci
-DWITH_DEBUG=0
-DENABLE_PROFILING=1
如果想清理此前的編譯所生成的文件,則需要使用如下命令:
make clean
rm CMakeCache.txt
#######################################################################
OK,現在正式開始
#######################################################################
1、安裝依賴包:
# yum install ncurses-devel openssl-devel libevent-devel jemalloc-devel cmake
#jemalloc-devel 在epel源中,其他的都在base源中已提供;
# cmake也可以使用源碼進行編譯安裝:
cmake是一個跨平臺編譯器:
# tar xf cmake-2.8.8.tar.gz # cd cmake-2.8.8 # ./bootstrap # make # make install
2、安裝開發環境:
# yum groupinstall "Development Tools" "Server Platform Development"
新添磁盤,建立LVM作爲mysql的數據目錄:
# fdisk -l /dev/sdb Disk /dev/sdb: 53.7 GB, 53687091200 bytes, 104857600 sectors Units = sectors of 1 * 512 = 512 bytes Sector size (logical/physical): 512 bytes / 512 bytes I/O size (minimum/optimal): 512 bytes / 512 bytes Disk label type: dos Disk identifier: 0x6e65abc7 Device Boot Start End Blocks Id System /dev/sdb1 2048 41945087 20971520 8e Linux LVM
#######################################################################
#創建邏輯卷:
# pvcreate /dev/sdb1 # vgcreate myvg /dev/sdb1 # lvcreate -L 10G -n mydata /dev/myvg
#格式化邏輯卷:
#mke2fs -t ext4 /dev/myvg/mydata
#在fstab文件中添加爲開機自動掛載:
# vim /etc/fstab /dev/mapper/centos-root / xfs defaults 0 0 UUID=daffae2e-9598-4d9c-807e-c47a2d07d96a /boot xfs defaults 0 0 /dev/mapper/centos-home /home xfs defaults 0 0 /dev/mapper/centos-swap swap swap defaults 0 0 /dev/myvg/mydata /mydata/data ext4 defaults 0 0
######################################################################
3、編譯安裝MariaDB:
# groupadd -r -g 306 mysql # useradd -r -g 306 -u 306 mysql # id mysql uid=306(mysql) gid=306(mysql) groups=306(mysql) # tar xvf mariadb-5.5.46.tar.gz # cd mariadb-5.5.46/ # cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mariadb -DMYSQL_DATADIR=/mydata/data -DSYSCONFDIR=/etc -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_READLINE=1 -DWITH_SSL=system -DWITH_ZLIB=system -DWITH_LIBWRAP=0 -DMYSQL_UNIX_ADDR=/tmp/mysql.sock -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci # make # make install
4、初始化數據庫:
# cd /usr/local/mysql/ # chown -R mysql:mysql * # ./scripts/mysql_install_db --datadir=/mydata/data --user=mysql # chown -R root *
5、提供腳本:
# cd /usr/local/mysql/ # cp support-files/mysql.server /etc/rc.d/init.d/mysqld # chmod +x /etc/rc.d/init.d/mysqld # chkconfig mysqld on # chkconfig --list
6、提供配置文件:
# cp support-files/my-large.cnf /etc/my.cnf # vim /etc/my.cnf #在文件中添加下述四行: thread_concurrency = 4 datadir = /mydata/data innodb_file_per_table = ON skip_name_resolve = ON
7、提供二進制文件,庫文件,頭文件,man手冊:
提供二進制文件:
# echo "export PATH=/usr/local/mysql/bin:$PATH" > /etc/profile.d/mysql.sh # . /etc/profile.d/mysql.sh
提供庫文件:
# echo "/usr/local/mysql/lib/" > /etc/ld.so.conf.d/mysql.conf
提供頭文件:
# ln -sv /usr/local/include/ /usr/include/mysql
提供man手冊:
# echo "MANPATH /usr/local/mysql" >> /etc/man.conf # man -M /usr/local/mysql/man mysqld #讓man手冊立刻生效爲最新;
8、啓動mysql服務,連接MariaDB:
# service mysqld start [root@localhost ~]# ss -tnl | grep :3306 LISTEN 0 50 *:3306 *:* # mysql
初始化MariaDB:
1、初始化第一個操作:
配置文件my.cnf
集中式的配置:多個應用程序共用的配置文件:
[mysqld]
[mysqld_safe]
[clent]
# mysqld --help --verbose | head -20
Default options are read from the following files in the given order:
/etc/my.cnf /etc/mysql/my.cnf ~/.my.cnf
# 此處說明了,mysql配置文件的加載順序;
使用配置文件的方式:
(1)它一次查找每個需要查找的文件,結果是所有文件的並集;
(2)如果某參數在多個文件中出現多次,後讀取的最終生效;
# /usr/local/mysql/bin/mysqld --help --verbose
(1)顯示mysqld程序啓動時可用的選項,通常都是長選項;
(2)顯示mysqld的配置文件中可用的服務變量;
mysql> SHOW GLOBAL VARIABLES;
msyql> SHOW SESSION VARIABLES;
2、初始化第二個操作:
#查看已存在的所有用戶:
mysql> SELECT Host,User,Password FROM mysql.user;
(1)刪除所用匿名用戶:
mysql> DROP USER ''@'localhost';
mysql> DROP USER ''@'localhost.localdomain';
mysql> DROP USER ''@'127.0.0.1';
(2)給所有的root用戶設定密碼:
第一種方式:
mysql> SET PASSWORD FOR [email protected] = PASSWORD('kalaguiyin');
第二種方式:
mysql> USE mysql;
mysql> UPDATE user SET PASSWORD = PASSWORD('kalaguiyin') WHERE user = 'root';
mysql> FLUSH PRIVILEGES;
第三種方式:
# mysqladmin -uroot -hlocalhost password 'kalaguiyin' -p
#按提示輸入密碼即可修改成功;-h 可用指定遠程服務器的IP地址;
# mysqladmin -uroot -hlocalhost -p flush-privileges;
OK,此時使用mysql命令再次登錄數據庫時,就需要登錄密碼了:
例如:# mysql -h127.0.0.1 -uroot -p
學習過程中的記錄,請各位高手指下留情!
補充:
補充,在CentOS 7 上已經不習慣使用service mysqld start的方式來啓動服務:
故使用systemctl方式啓動:
# vim /usr/lib/systemd/mysqld.service # Don't forget to reload systemd daemon after you change unit configuration: # # root> systemctl --system daemon-reload # [Unit] Description=MariaDB database server After=syslog.target After=network.target # [Service] Type=simple User=mysql Group=mysql # # Note: we set --basedir to prevent probes that might trigger SELinux alarms, ExecStart=/usr/local/mysql/bin/mysqld_safe --basedir=/usr/local/mysql # # Give a reasonable amount of time for the server to start up/shut down TimeoutSec=300 # # Place temp files in a secure directory, not /tmp PrivateTmp=false # [Install] WantedBy=multi-user.target # systemctl daemon-reload
#此時便可以使用systemctl管理mysqld服務了:
# systemctl start mysqld.service [root@localhost systemd]# systemctl stop mysqld.service [root@localhost systemd]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::443 :::* [root@localhost systemd]# systemctl start mysqld.service [root@localhost systemd]# ss -tnl State Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 50 *:3306 *:* LISTEN 0 128 *:22 *:* LISTEN 0 100 127.0.0.1:25 *:* LISTEN 0 128 :::80 :::* LISTEN 0 128 :::22 :::* LISTEN 0 100 ::1:25 :::* LISTEN 0 128 :::443 :::*