大概步驟如下:
- 關閉防火墻
- 配置sysctl.conf
- 檢查操作系統(tǒng)是否安裝了mysql
- 下載mysql源碼包
- 添加用戶和組
- 配置mysql環(huán)境便令
- 創(chuàng)建目錄并授權
- 解壓mysql
- 配置yum源绒极,安裝cmake
- 編譯安裝
- mysql參數配置
- 初始化mysql腳本
- 啟動mysql
- 登錄mysql
關閉防火墻
systemctl status firewalld 查看防火墻狀態(tài)
systemctl stop firewalld 關閉防火墻
關閉selinux
vi /etc/selinux/config杰妓,將SELNUX=enconfig更改為:disabled
配置sysctl.conf
正式服務器怜俐,配置,個人使用就配置霍狰,主要是優(yōu)化了mysql跟操作系統(tǒng)。
查看mysql是否安裝
rpm -qa |grep mysql
刪除mysql:rpm -e mysql.xxx / yum remove -y mysql
重點來了:
centos 7 因為mysql收費的原因赂摆,不在支持mysql,轉而內部集成mariadb揽涮,那么首先要卸載mariabd
rpm -qa | grep mariadb
如果有依賴,就強制卸載即可
rpm -e --nodeps mariadb-libs-5.x
下載mysql源碼包
在http://mysql.com上下載通用的linux源碼
可以直接在服務器上安裝wget命令阴幌,得到mysql源碼下載目錄勺阐,即可下載。
如:wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.24.tar.gz
添加mysql組
查詢mysql是否存在矛双,id mysql
存在刪除 userdel -r msql
groupadd mysql
useradd -d /home/mysql -g mysql -m mysql
修改密碼:passwd mysql ...
設置環(huán)境變量
切換到mysql用戶下:su - mysql
vi .bash_profile
在PATH=HOME/bib:后面添加mysql bin目錄渊抽。
# .bash_profile
# Get the aliases and functions
if [ -f ~/.bashrc ]; then
. ~/.bashrc
fi
# User specific environment and startup programs
PATH=$PATH:$HOME/.local/bin:$HOME/bin:/u01/my3306/mysql/bin
export PATH
/u01/my3306/mysql/bin是我的mysql bin目錄
保存退出,執(zhí)行source .bash_profile,加載bash_profile
創(chuàng)建目錄并授權
mkdir -p /u01/my3306/mysql
mkdir -p /u01/my3306/mysql/data
mkdir -p /u01/my3306/mysql/tmp
mkdir -p /u01/my3306/mysql/log/iblog
mkdir -p /u01/my3306/mysql/log/binlog
mkdir -p /u01/my3306/mysql/run
授權:
chown -R mysql:mysql /u01/my3306
對/u01目錄授予mysql:mysql組用戶的權限
chmod -R 775 /u01/my3306
更改目錄權限
解壓mysql
tar -zxvf mysql-boost-5.7.21.tar.gz
安裝cmake編譯工具
yum install -y cmake gcc gcc-c++ ncurses-devel bison zlib libxml openssl
下載boost軟件
注意: mysql5.7.2x版本的必須指定1.5.9的boost背零,高版本不行
放到指定目錄解壓即可
進行cmake編譯mysql源文件
在mysql源代碼目錄下執(zhí)行
cmake \
-DCMAKE_INSTALL_PREFIX=/u01/my3306/mysql \
-DMYSQL_DATADIR=/u01/my3306/mysql/data \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DWITH_EMBEDDED_SERVER=1 \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_MYISAM_STORAGE_ENGINE=1 \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DWITH_ARCHIVE_STORAGE_ENGINE=1 \
-DWITH_BLACKHOLE_STORAGE_ENGINE=1 \
-DWITH_FEDERATED_STORAGE_ENGINE=1 \
-DWITH_PARTITION_STORAGE_ENGINE=1 \
-DWITH_MEMORY_STORAGE_ENGINE=1 \
-DMYSQL_UNIX_ADDR=/u01/my3306/mysql/run/mysql.sock \
-DMYSQL_TCP_PORT=3306 \
-DSYSCONFDIR=/etc \
-DMYSQL_USER=mysql \
-DENABLE_DOWNLOADS=1 \
-DWITH_BOOST=/u01/my3306/mysql/boost \
-DWITH_READLINE=on
通過閱讀官方文件http://dev.mysql.com/doc/refman/5.6/en/source-configuration-options.html腰吟,去除選項-DWITH_READLINE=1和-DWITH_SSL=YES
報錯:
CMake Error at cmake/boost.cmake:81 (MESSAGE):
You can download it with -DDOWNLOAD_BOOST=1 -DWITH_BOOST=<directory>
This CMake script will look for boost in <directory>. If it is not there,
it will download and unpack it (in that directory) for you.
If you are inside a firewall, you may need to use an http proxy:
export http_proxy=http://example.com:80
Call Stack (most recent call first):
cmake/boost.cmake:238 (COULD_NOT_FIND_BOOST)
CMakeLists.txt:507 (INCLUDE)
-- Configuring incomplete, errors occurred!
See also "/u01/my3306/mysql-5.7.21/CMakeFiles/CMakeOutput.log".
See also "/u01/my3306/mysql-5.7.21/CMakeFiles/CMakeError.log".
需要添加boost
1. 下載boost
2. 解壓到mysql的安裝目錄下,新建一個boost目錄
3. 在cmake參數中添加
-DWITH_BOOST=/u01/my3306/mysql/boost \
boost下載:https://www.boost.org/users/download/
對應1.5.9版本
進行編譯安裝
make & make install
make 進行編譯徙瓶,這里時間比較久
make install 進行安裝
mysql參數my.cnf配置
[client]
port=3306
socket=/u01/my3306/mysql/run/mysql.sock
[mysql]
socket=/u01/my3306/mysql/run/mysql.sock
[mysqld]
autocommit=1
general_log=off
explicit_defaults_for_timestamp=true
# system
basedir=/u01/my3306/mysql
datadir=/u01/my3306/mysql/data/
open_files_limit=10240
# 控制mysql接收數據包的大小毛雇,主從應該保證一致
max_allowed_packet=32m
# 控制允許的最大連接數
max_connections=2000
# 最大用戶連接不宜過大
max_user_connections=200
wait_timeout=100
pid_file=/u01/my3306/mysql/run/mysqld.pid
port=3306
server_id=101
# 禁用DNS查找
skip_name_resolve=ON
socket=/u01/my3306/mysql/run/mysql.sock
tmpdir=/u01/my3306/mysql/tmp
# 默認值5000
open_files_limit=5000
# 設置 LOAD DATA and SELECT ... INTO OUTFILE 導出限制
secure_file_priv=''
# bin log
log_bin=/u01/my3306/mysql/log/binlog/binlog
binlog_cache_size=32768
binlog_format=row
# 保留bin-log保存的日期
expire_logs_days=3
log_slave_updates=ON
max_binlog_size=512M
log-bin-index=binlog.index
# 控制mysql如何想磁盤刷新binlog,默認為0侦镇,建議設置為1,
sync_binlog=1
# logging
log_error=/u01/my3306/mysql/log/mysql_error.err
slow_query_log_file=/u01/my3306/mysql/log/slow.log
log_queries_not_using_indexes=0
slow_query_log=1
log_slave_updates=ON
log_slow_admin_statements=1
long_query_time=1
# relay
relay_log=/u01/my3306/mysql/log/relaylog
relay_log_index=/u01/my3306/mysql/log/relay.index
relay_log_info_file=/u01/my3306/mysql/log/relay-log.info
# slave
slave_load_tmpdir=/u01/my3306/mysql/tmp
slave_skip_errors=OFF
# 禁止非super權限的用戶寫權限,一定要在從庫啟用
# read_only=1
# innodb
innodb_data_home_dir=/u01/my3306/mysql/log/iblog
innodb_log_group_home_dir=/u01/my3306/mysql/log/iblog
innodb_adaptive_flushing=ON
innodb_adaptive_hash_index=ON
innodb_autoinc_lock_mode=1
innodb_buffer_pool_instances=8
# default
innodb_change_buffering=inserts
innodb_buffer_pool_size=256M
innodb_data_file_path=ibdata1:32M;ibdata2:16M:autoextend
# 控制雙寫緩沖灵疮,避免頁損壞
innodb_doublewrite=1
# 為每一張表建立一個單獨的表空間,不使用系統(tǒng)表空間
innodb_file_per_table=1
# 系統(tǒng)提交事務的方式: 2:每次事物提交壳繁,執(zhí)行l(wèi)og數據寫入catch震捣,每秒執(zhí)行一次flush log到磁盤
innodb_flush_log_at_trx_commit=2
# 文件交換的方式,linux服務器設置為O_DIRECT即可
innodb_flush_method=O_DIRECT
innodb_io_capacity=1000
innodb_lock_wait_timeout=10
innodb_log_buffer_size=20M
innodb_log_file_size=100M
innodb_log_files_in_group=4
innodb_max_dirty_pages_pct=60
# 不能大于open_file_limit
innodb_open_files=4000
innodb_purge_threads=1
innodb_read_io_threads=4
innodb_stats_on_metadata=OFF
innodb_support_xa=ON
innodb_use_native_aio=OFF
innodb_write_io_threads=10
[mysqldump]
quick
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqld_safe]
basedir=/u01/my3306/mysql
datadir=/u01/my3306/mysql/data
pid_file=/u01/my3306/mysql/run/mysqld.pid
tmpdir=/u01/my3306/mysql/tmp
進行初始化數據庫和密碼
./mysqld --initialize --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data --default-files=/u01/my3306/mysql/my.cnf
注意:所有的報錯信息都將會在配置的mysql-err.err日志中體現(xiàn)闹炉,如果沒有配置這個日志蒿赢,將會在控制臺直接輸出。
注意:此條語句執(zhí)行時容易報錯渣触,成功至少要滿足以下幾個條件
1. /u01/my3306/mysql/data目錄存在并且一定要為空目錄羡棵,否則報錯;
2. 如果本機已經存在了其余的mysql嗅钻,請確實/etc/my.cnf文件不存在皂冰,否則會按照/etc/my.cnf中的設置進行初始化店展,datadir會讀取另一個mysql實例的路徑,從而導致報錯秃流。遇到此情況赂蕴,可以先將已經存在的mysql實例停止,然后將/etc/my.cnf文件剪切到此實例對應的datadir目錄中舶胀,再啟動此實例概说,然后重新執(zhí)行初始化命令;
報錯:
2018-03-21T03:53:19.536884Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:53:19.539255Z 0 [ERROR] --initialize specified but the data directory has files in it. Aborting.
2018-03-21T03:53:19.539297Z 0 [ERROR] Aborting
- 提示timestamp有警告峻贮,需要禁用某些非標準的行為席怪。
- data數據庫目錄已經存在文件,需要先刪除該目錄下的所有文件纤控。
官網:詳情請查看
注意:my.cnf的權限設置為644,chmod 644 my.cnf 用戶設置為mysql 這是mysql的安全機制挂捻。
[root@lnlr bin]# ./mysqld --initialize --defaults-file=/u01/my3306/mysql/my.cnf --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data
2018-03-21T03:42:15.884264Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:42:16.945180Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-03-21T03:42:17.242546Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-03-21T03:42:18.471497Z 0 [ERROR] unknown variable 'defaults-file=/u01/my3306/mysql/my.cnf'
2018-03-21T03:42:18.471564Z 0 [ERROR] Aborting
提示找不到--defaults-file=/u01/my3306/mysql/my.cnf這個變量
原因:
mysql尋找my.cnf的順序
/etc/my.cnf
/etc/mysql/my.cnf
$mysql_home/my.cnf
~/.my.cnf
解決辦法:
將/etc/my.cnf進行刪除,然后把啟動命令的順序進行調整船万。
將--defaults-file調整到--initialize前面即可
正確命令: ./mysqld --defaults-file=/u01/my3306/mysql/my.cnf --initialize --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data
正確后的輸出:
2018-03-21T03:59:48.606609Z 0 [Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit_defaults_for_timestamp server option (see documentation for more details).
2018-03-21T03:59:50.068792Z 0 [Warning] InnoDB: New log files created, LSN=45790
2018-03-21T03:59:50.164896Z 0 [Warning] InnoDB: Creating foreign key constraint system tables.
2018-03-21T03:59:50.226389Z 0 [Warning] No existing UUID has been found, so we assume that this is the first time that this server has been started. Generating a new UUID: 4d9ac927-2cbc-11e8-932c-000c29ca223e.
2018-03-21T03:59:50.227839Z 0 [Warning] Gtid table is not ready to be used. Table 'mysql.gtid_executed' cannot be opened.
2018-03-21T03:59:50.532475Z 0 [Warning] CA certificate ca.pem is self signed.
2018-03-21T03:59:50.684543Z 1 [Note] A temporary password is generated for root@localhost: 6GttX,)_-paX
最后一行是密碼
初始化正確命令,無密碼
./mysqld --defaults-file=/u01/my3306/mysql/my.cnf --initialize-insecure --user=mysql --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data
參數說明:
--initialize 是使用mysqld初始化數據庫,并且生成數據庫密碼
--initialize-insecure 同上刻撒,但是不初始化數據庫密碼
無論平臺如何,都 --initialize用于“ 默認安全 ”安裝(即包括生成隨機初始`root`密碼)耿导。在這種情況下声怔,密碼被標記為過期,
您將需要選擇一個新密碼舱呻。使用該 --initialize-insecure選項醋火,不會 `root`生成密碼; 假設您在將服務器投入生產之前將及時為帳戶分配密碼。
--defaults-file 指定使用my.cnf配置文件
--basedir數據庫的根目錄
--datadir數據庫數據文件目錄
安全啟動mysql數據庫
啟動命令:
./mysqld_safe --user=mysql --defaults-file=/u01/my3306/mysql/my.cnf &
ctrl+c結束
ps -ef | grep mysql查看mysql進程
[root@lnlr bin]# ps -ef | grep mysql
root 8701 25911 0 13:24 pts/0 00:00:00 /bin/sh ./mysqld_safe --defaults-file=/u01/my3306/mysql/my.cnf
mysql 8761 8701 0 13:24 pts/0 00:00:00 /u01/my3306/mysql/bin/mysqld --defaults-file=/u01/my3306/mysql/my.cnf --basedir=/u01/my3306/mysql --datadir=/u01/my3306/mysql/data --plugin-dir=/u01/my3306/mysql/lib/plugin --user=mysql --log-error=lnlr.err --pid-file=lnlr.pid
root 9218 25911 0 13:29 pts/0 00:00:00 ./mysql -uroot -p
root 9250 7572 0 13:29 pts/1 00:00:00 grep --color=auto mysql
啟動mysql數據庫:
1. 使用mysqld 啟動
2. 使用mysqld_safe安全啟動
卻別:
安全啟動的好處為在誤殺了mysql進程的時候箱吕,mysqld_safe守護進程將會自動的把mysqld進程啟動起來芥驳。
小板凳: 我使用mysqld_safe啟動的時候,拷貝命令將會報找不到--defaults-file茬高,手動敲入就可以兆旬。很奇怪。
登錄mysql怎栽,并修改密碼
./mysql -uroot -p
輸入密碼進行登錄
修改密碼:
alter user 'root'@'localhost' identified by 'root';
處理遠程登錄
通過以上步驟丽猬,在localhost可以使用mysql,但是想要遠程訪問,將會報錯熏瞄。
ERROR 1130: Host '192.168.21.249' is not allowed to connect to this MySQL
原因:防火墻或該用戶只能localhost訪問脚祟。
解決辦法:
1. 將mysql數據庫下user表中的host字段更改為%即可
use mysql; update user set host = '%' where user = 'root'; quit;
重新啟動mysql數據庫即可,三條命令一次性執(zhí)行;還可以將更改密碼同時放入强饮。
2. 可以利用授予權限
沒嘗試
后續(xù)設置
1. 將/u01/my3306/mysql/my.cnf拷貝到/etc目錄下愚铡,mysql默認先尋找該目錄,這樣免得每次啟動都需要帶上--defaults-file路徑
cp /u01/my3306/mysql/my.cnf /etc
2. 將安裝目錄下的/u01/my3306/mysql/support-files/mysql.server拷貝到/etc/init.d目錄下
cp /u01/my3306/mysql/support-files/mysql.server /etc/init.d
3. 添加mysql.server到服務中
chkconfig --add mysql.server
4. 測試使用systemctl 啟動mysql
systemctl start mysql.server
5. 查看是否啟動成功
ps -ef | grep mysql
有mysql服務則啟動成功
6. 添加到linux服務器開機自啟動
systemctl enable mysql.server