mysql源碼可以到官網下載
安裝依賴包
yum -y install gcc gcc-c++ ncurses ncurses-devel bison libgcrypt perl make cmake
創建組mysql
groupadd mysql
創建用戶mysql
useradd -r -g mysql -s /bin/false -M mysql
創建mysql 的安裝目錄
mkdir -p /usr/local/mysql
創建mysql數據存儲目錄
mkdir -p /data/mysql
修改目錄的用戶所屬
chown mysql:mysql -R /data
chown mysql:mysql -R /usr/local/mysql/
下載mysql源文件
tar -zxvf mysql-boost-5.7.25.tar.gz
解壓到當前目錄,然后進入mysql源文件目錄
cd mysql-boost-5.7.25
mv boots /usr/local/mysql/boost
cmake . -DCMAKE_INSTALL_PREFIX=/usr/local/mysql -DMYSQL_DATADIR=/data/mysql -DDEFAULT_CHARSET=utf8 -DDEFAULT_COLLATION=utf8_general_ci -DMYSQL_TCP_PORT=3306 -DMYSQL_USER=mysql -DWITH_MYISAM_STORAGE_ENGINE=1 -DWITH_INNOBASE_STORAGE_ENGINE=1 -DWITH_ARCHIVE_STORAGE_ENGINE=1 -DWITH_BLACKHOLE_STORAGE_ENGINE=1 -DWITH_MEMORY_STORAGE_ENGINE=1 -DENABLE_DOWNLOADS=1 -DDOWNLOAD_BOOST=1 -DWITH_BOOST=/usr/local/mysql/boost
在這里出現了一個警告
重新執行一下上面的cmake命令,警告就沒了
make
可能會出現錯誤,可能是因為內存不足導致
我這里是內存不足的原因
然后添加了虛擬內存,就可以繼續編譯了
dd if=/dev/zero of=/swapfile bs=1k count=2048000 注:(count表示虛擬內存大小,我這里用了2G,一般跟物理內存一樣或者大虛擬內存一倍)
mkswap /swapfile
swapon /swapfile
然繼續編譯就OK
make
make install
我重新的執行了一次修改了文件所屬用戶,因為安裝后有新的目錄
chown mysql:mysql -R /data
chown mysql:mysql -R /usr/local/mysql/
添加環境變量
echo "export PATH=$PATH:/home/mysql/bin" >> /etc/profile
source /etc/profile
初始化數據庫 –initialize 表示默認生成一個安全的密碼,–initialize-insecure 表示不生成密碼
/usr/localmysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
出現了一個警告和錯誤
警告:[Warning] TIMESTAMP with implicit DEFAULT value is deprecated. Please use --explicit server option (see documentation for more details)
錯誤:--initialize specified but the data directory has files in it
警告的解決方法是
vim /etc/my.cnf
在[mysqld]寫入 explicit_defaults_for_timestamp=1
報錯誤的原因是因為存放數據的目錄下有文件
mv /data/mysql/* /tmp 移動走就好了
重新執行一遍初始化數據庫
/usr/localmysql/bin/mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
初始化成功
拷貝mysql啟動文件到/etc/init.d/ ,並賦予執行權限
注:support-files/mysql.server這個文件在mysql剛編譯的目錄下(即是解壓的目錄下)
cp support-files/mysql.server /etc/init.d/mysqld
chmod +x /etc/init.d/mysqld
設置mysql開機啟動
chkconfig --add mysqld
chkconfig mysqld on
這是我的etc.cnf配置文件
啟動數據庫
service mysqld start(或者/etc/init.d/mysqld start)
進入數據庫
這里出現了一個錯誤
解決方法是修改/etc/my.cnf
添加這兩個路徑
接着又一個錯誤,可能是因為我初始化數據庫太久了,所有密碼過期了 Your password has expired. To log in you must change it using a client that supports expired passwords.
修改my.cnf 加入無密登陸數據庫
skip-grant-tables
重啟mysql即可
重新設置mysql密碼
use mysql; 切換到user庫
grant all on * to 'root'@'localhost' identified by '123456'; 一次執行會報錯
FLUSH PRIVILEGES; 刷新權限
grant all on * to 'root'@'localhost' identified by '123456'; 再次執行即可
%表示允許遠程登陸
localhost表示本地登陸
記得把my.cnf里的 skip-grant-tables 注釋掉或者刪除 然后再重啟服務器
重新輸入密碼進入即可
٩(๑>◡<๑)۶