a.連接數據庫報111
從一台linux遠程連接另一台linux上的MySQL,出現ERROR 2003 (HY000): Can't connect to MySQL server on 'xxx.xxx.xxx.xx'(111)錯誤.
1.skip_networking:這個參數讓MySQL只能通過本機Socket連接(socket連接也是本地連接的默認方式);
2.可能使用了bind_address=127.0.0.1;通過查看my.cnf,以上兩個都是沒設置的,排除掉這兩種情況;
3.排查DNS解析問題,檢查是否設置了:skip_name_resolve,這個參數加上后,不支持主機名的連接方式;
4.排查用戶和密碼問題,其實用戶和密碼的錯誤,不會出現111的,所以排除用戶密碼問題,密碼錯誤報這個錯;
ERROR 1045 (28000): Access denied for user 'root'@'XXXX' (using password: YES)
5.排查端口問題,有可能MySQL port不是默認的3306,連接時沒有指定--port,最終得出監聽端口是11306.
b.mysql5.7初始化
A.安裝
yum install -y cmake make gcc gcc-c++ libaio ncurses ncurses-devel wget https://cdn.mysql.com//Downloads/MySQL-5.7/mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz tar xf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz -C /usr/local/ groupadd mysql useradd -r -g mysql -s /bin/false mysql cd /usr/local/ mv mysql-5.7.24-linux-glibc2.12-x86_64/ mysql mkdir -p /data/mysql/tmp chown -R mysql:mysql /usr/local/mysql chown -R mysql:mysql /data/mysql/ cd /usr/local/mysql/bin ./mysqld --initialize --user=mysql --basedir=/usr/local/mysql --datadir=/data/mysql
初始化數據庫,會生成一個臨時密碼
B.啟動
配置my.cnf
[mysqld] character_set_server=utf8 init_connect='SET NAMES utf8' basedir=/usr/local/mysql datadir=/data/mysql #不區分大小寫 lower_case_table_names = 1 #不開啟sql嚴格模式 sql_mode = "STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION" socket=/data/mysql/tmp/mysql.sock log-error=/data/mysql/tmp/mysqld.log pid-file=/data/mysql/tmp/mysqld.pid [mysqld_safe] log-error=/data/mysql/tmp/mysqld_safe.log pid-file=/data/mysql/tmp/mysqld_safe.pid # 添加開機啟動 cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysqld # 修改啟動腳本 vim /etc/init.d/mysqld # 在46行添加路徑 basedir=/usr/local/mysql datadir=/data/mysql
C.解決問題
啟動報錯,這個問題在之前的博客中已經講過
創建文件並授予mysql權限
touch /data/mysql/tmp/mysqld_safe.log chown -R mysql:mysql /data/mysql/ echo "export PATH=/usr/local/mysql/bin:$PATH" >> /etc/profile source /etc/profile
啟動成功后,可以發現,pid文件是[mysqld]中定義的,log-error文件用的是[mysqld_safe]中定義的.
連接數據庫,找不到socket,解決辦法:
1.創建軟鏈
2.直接指定socket
修改root密碼並授權一個新用戶
兩個用戶以不同的方式均可登錄
c.mysql5.7忘記root密碼,如何修改去密碼
# 關閉正在運行的 MySQL service mysql stop # 運行 mysqld_safe --skip-grant-tables & # 為了安全可以這樣禁止遠程連接 mysqld_safe --skip-grant-tables --skip-networking & # 使用mysql連接server mysql -p # 更改密碼 update mysql.user set authentication_string=password('123qwe') where user='root' and Host = 'localhost'; # 新版的mysql數據庫下的user表中已經沒有Password字段了,而是將加密后的用戶密碼存儲於authentication_string字段 flush privileges; quit; # 也可以使用alter user: alter user 'root'@'localhost' identified by '123'; # 也可以這樣 set password for 'root'@'localhost'=password('123');
d.mysql5.7自動初始化root密碼
# 確保mysql是啟動的 defaultmysqlpwd=`grep 'A temporary password' /var/log/mysqld.log | awk -F "root@localhost: " '{ print $2}'` /usr/bin/mysql -uroot -p"${defaultmysqlpwd}" --connect-expired-password <<EOF ALTER USER 'root'@'localhost' IDENTIFIED BY '123456Aa?'; EOF
搭建參考這篇:https://blog.csdn.net/z13615480737/article/details/80019881
連接報111:https://www.cnblogs.com/ximalaya/p/6711792.html
忘記root密碼:https://www.cnblogs.com/xiaotengyi/p/5458731.html
自動初始化root密碼:https://www.cnblogs.com/fb010001/p/9134742.html