環境
Docker version 18.06.3-ce, build d7080c1
Linux c5e082c17dae 4.4.0-31-generic #50~14.04.1-Ubuntu SMP
mysql-5.5.62
安裝流程
創建用戶
groupadd mysql
useradd mysql -g mysql -d /usr/local/mysql -s /bin/sh
解壓安裝
apt-get install libncurses5-dev bison libaio1
mkdir build
cd build
cmake .. \
-DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DWITH_INNOBASE_STORAGE_ENGINE=1 \
-DMYSQL_DATADIR=/usr/local/mysql/data \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DSYSCONFDIR=/etc \
-DDEFAULT_COLLATION=utf8_general_ci \
-DEXTRA_CHARSETS=all \
-DENABLED_LOCAL_INFILE=1 \
-DWITH_BOOST=/usr/local/boost
-DCMAKE_INSTALL_PREFIX:安裝路徑
-DMYSQL_DATADIR:數據存放目錄
-DWITH_BOOST:boost 源碼路徑
-DSYSCONFDIR:my.cnf 配置文件目錄
-DEFAULT_CHARSET:數據庫默認字符編碼
-DDEFAULT_COLLATION:默認排序規則
-DENABLED_LOCAL_INFILE:允許從本文件導入數據
-DEXTRA_CHARSETS:安裝所有字符集
-DWITH_INNOBASE_STORAGE_ENGINE=1:安裝InnoDB存儲引擎
-DDEFAULT_CHARSET=utf8:默認編碼設置成utf8
-DWITH_EXTRA_CHARSETS=all:支持其他所有的編碼
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock:指定SOCK文件路徑
make
make install
# 注意新版的 mysql 安裝完畢以後會自動在 etc 下創建一個 mysql 文件夾 ,文件夾內有 my.cnf 配置文件 但是我們不需要,直接刪除即可
rm /etc/mysql/my.cnf
# 複製原 mysql 的配置文件 作爲 etc 下的配置文件)
sudo cp /usr/local/mysql/support-files/my-medium.cnf /etc/my.cnf
# 編輯 my.cnf 文件 在[mysqld]下面添加以下內容
basedir=/usr/local/mysql
datadir=/usr/local/mysql/data
user=mysql
調整文件屬性
# 目錄和文件都屬於mysql用戶
chown -R mysql.mysql /usr/local/mysql/
chown -R mysql.mysql /usr/local/mysql/data
chown -R mysql.mysql /etc/my.cnf
初始化數據庫
cd /usr/local/mysql
sudo scripts/mysql_install_db --user=mysql --basedir=/usr/local/mysql --datadir=/usr/local/mysql/data/
修改root密碼
/usr/local/mysql/bin/mysqladmin -u root password 'YOUR PASSWORD'
配置mysql服務
cp support-files/mysql.server /etc/init.d/mysqld
sysv-rc-conf keepalived on # 開機啓動
啓動服務
service mysqld start # 啓動mysql服務
service mysqld stop # 停止mysql服務
service mysqld restart # 重新啓動mysql服務
配置環境變量
vim /etc/profile
#mysql
export MYSQL_HOME=/usr/local/mysql
export PATH=$MYSQL_HOME/bin:$PATH
source /etc/profile
遇到的問題
0 ‘cli_list_fields’ undeclared here (not in a function)
如果在根目錄下就新建build裏面編譯,如果在build裏面就在根目錄下編譯。
1 db open error: Driver not loaded Driver not loaded
因爲你的qt沒編譯mysql驅動,只編譯了sqllite的驅動。
查看/usr/local/qtbase/plugins/sqldrivers目錄下,有沒有mysql的so文件。如果有,複製到
/usr/lib/x86_64-linux-gnu/qt5/plugins/sqldrivers/
如果沒有
如果你的 mysql 也和我一樣是自己安裝的話還要下載一下 mysql 的動態庫,不然會出現沒有 lib 依賴包的情況。
sudo apt-get install libmysqlclient-dev
源碼解壓後找到你解壓的目錄,進入 /usr/local/qt-everywhere-opensource-src-5.9.2/qtbase/src/plugins/sqldrivers/mysql
開始編譯
qmake "INCLUDEPATH+=/usr/include/mysql" "LIBS+=/usr/lib/x86_64-linux-gnu/libmysqlclient.so" mysql.pro
make
make install
這樣在 /usr/local/qt-everywhere-opensource-src-5.9.2/qtbase/plugins/sqldrivers 就能在你們找到你想要的驅動了,libqsqlmysql.so
最後複製到/usr/lib/x86_64-linux-gnu/qt5/plugins/sqldrivers/下面就可以了
2 mysqld_safe Directory ‘/var/run/mysqld’ for UNIX socket file don’t exists.
mkdir -p /var/run/mysqld
chown mysql:mysql /var/run/mysqld
3 The server quit without updating PID file (/var/run/mysqld/mysqld.pid)
可能的解決方式:
1、可能是 / usr/local/mysql/data / 數據目錄 mysql 用戶沒有權限(修改數據目錄的權限)
解決方法 :給予權限,執行 sudo chmod -R 777 /usr/local/mysql/data/ 然後重新啓動 mysql
2、可能進程裏已經存在 mysql 進程
解決方法:用命令 “ps -ef|grep mysqld” 查看是否有 mysqld 進程,如果有使用 “kill -9 進程號” 殺死,然後重新啓動 mysqld!
3、可能是第二次在機器上安裝 mysql,有殘餘數據影響了服務的啓動。
解決方法:去 mysql 的二進制日誌目錄看看,如果存在 mysql-binlog.index,就趕快把它刪除掉吧
4、mysql 在啓動時沒有指定配置文件時會使用 / etc/my.cnf 配置文件,請打開這個文件查看在 [mysqld] 下有沒有指定數據目錄(datadir)。
解決方法:請在 [mysqld] 下設置這一行:datadir = /opt/mysql/data
5、skip-federated 字段問題
解決方法:檢查一下 / etc/my.cnf 文件中有沒有沒被註釋掉的 skip-federated 字段,如果有就立即註釋掉吧。
6、錯誤日誌目錄不存在
解決方法:使用 “chown” “chmod” 命令賦予 mysql 所有者及權限
7、selinux 惹的禍,如果是 centos 系統,默認會開啓 selinux
解決方法:先臨時改爲警告模式:[root@www php]# setenforce 0
然後打開 / etc/sysconfig/selinux,把 SELINUX=enforcing 改爲 SELINUX=disabled
8、在data裏看日誌,哪報錯解決哪。