文章目錄
1 linux下安裝MySQL
本文主要介紹rpm安裝方式。
1.1 mysql rpm包下載
- 首先下載rpm安裝包, mysql下載地址,找到你想要的版本
MySQL-5.7/
mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar
1.2 移除已經安裝的早期版本
- 使用以下命令查看當前安裝mysql情況,查找以前是否裝有mysql
rpm -qa | grep -i mysql
- 如果有查詢結果,則說明之前安裝了,如:
MySQL-client-5.5.25a-1.rhel5
MySQL-server-5.5.25a-1.rhel5 - 停止mysql服務、刪除之前安裝的mysql
刪除命令:
如果提示錯誤:error: %preun(xxxxxx) scriptlet failed, exit status 1,可嘗試一下命令:rpm -e –nodeps 包名 如: rpm -e –nodeps MySQL-client-5.5.25a-1.rhel5
rpm -e --noscripts MySQL-client-5.5.25a-1.rhel5
- 查找之前mysql的目錄、並刪除
注意:卸載後/etc/my.cnf不會刪除,需要進行手工刪除.find / -name mysql rm -rf /var/lib/mysql
rm -rf /etc/my.cnf
- 再次查找機器是否安裝mysql,如果查詢無結果,說明已經卸載徹底,接下來直接安裝mysql即可。
1.3 linux mysql安裝
-
創建用戶和組(如果已經創建則跳過)
groupadd mysql useradd -r -g mysql mysql
-
解壓,得到幾個壓縮文件,如:
mysql-devel 開發用到的庫以及包含文件,
mysql mysql 客戶端,
mysql-server 數據庫服務器,tar -xvf mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar
-
依次安裝
rpm -ivh mysql-community-common-5.7.23-1.el6.x86_64.rpm
rpm -ivh mysql-community-libs-5.7.23-1.el6.x86_64.rpm
rpm -ivh mysql-community-client-5.7.23-1.el6.x86_64.rpm
rpm -ivh mysql-community-server-5.7.23-1.el6.x86_64.rpmrpm -ivh mysql-community-server-5.7.23-1.el6.x86_64.rpm
至此,mysql已經安裝完成。
上面幾個包有依賴關係,執行有先後。使用rpm安裝方式安裝mysql,安裝的路徑如下:
a 數據庫目錄
/var/lib/mysql/
b 配置文件
/usr/share/mysql(mysql.server命令及配置文件)
c 相關命令
/usr/bin(mysqladmin mysqldump等命令)
d 啓動腳本
/etc/rc.d/init.d/(啓動腳本文件mysql的目錄)e /etc/my.conf
-
修改密碼
安裝完後,使用命令service mysqld start啓動MySQL服務。由於MySQL5.7.4之前的版本中默認是沒有密碼的,登錄後直接回車就可以進入數據庫,進而進行設置密碼等操作。其後版本對密碼等安全相關操作進行了一些改變,在安裝過程中,會在安裝日誌中生成一個隨機密碼。
查看臨時密碼:
grep 'temporary password' /var/log/mysqld.log 2018-10-28T16:43:10.889769Z 1 [Note] A temporary password is generated for root@localhost:hcLMTxbOh2?w
這樣我們得知臨時密碼是:hcLMTxbOh2?w。
此時,使用MySQL生成的隨機密碼就能夠正常登錄:mysql -uroot -p hcLMTxbOh2?w
登錄成功後,請立即修改密碼。
如果沒有修改密碼,系統將會提示錯誤:在"ALTER USER"操作前不會執行其他操作;並且確保修改之後的密碼的安全程度能夠滿足MySQL的要求。推薦數字、字母和特殊符號混用。
執行以下操作配置root用戶的密碼與授權:
mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '111111'; mysql> grant all privileges on *.* to 'root' @'%' identified by 111111; mysql> flush privileges;
1.4 安裝過程出現的問題:
-
其他設備在客戶端中打開表的速度非常慢(無論表的大小),甚至連接超時,但是直接登錄到服務器在本地連接MySQL,速度則正常。
問題原因:MySQL數據庫收到一個網絡連接後,首先拿到對方的IP地址,然後對這個IP地址進行反向DNS解析從而得到這個IP地址對應的主機名。用主機名在權限系統裏面進行權限判斷。反向DNS解析是耗費時間的,有可能讓用戶感覺起來很慢。甚至有的時候,反向解析出來的主機名並沒有指向這個IP地址,這時候就無法連接成功了。
解決方案:爲了避免這個反查過程,可以在MySQL的配置文件my.cnf的[mysqld]項下追加以下配置:
skip-name-resolve
2 MySQL主從複製
IP | 角色 |
---|---|
192.168.33.3 | master |
192.168.33.4 | slave |
2.1 master配置(192.168.33.3)
-
master上開啓binlog日誌
一般mysql配置文件在目錄/etc下,叫my.cnf (如果找不到的話也有可能在這些目錄下:/etc/my.cnf,/etc/mysql/my.cnf,/usr/local/mysql/etc/my.cnf)1、vim /etc/my.cnf 2、在[mysqld]下加入: port=3306 server-id=1 #服務器id (主從必須不一樣) log-bin=mysql-bin #打開日誌(主機需要打開),這個mysql-bin也可以自定義,這裏也可以加上路徑#作爲主機的配置 binlog-do-db=employees #要給從機同步的庫# binlog-do-db=binlog-ignore-db=mysql #不給從機同步的庫(多個寫多行) binlog-ignore-db=information_schema binlog-ignore-db=performance_schemab inlog-ignore-db=sys expire_logs_days=7 #自動清理 7 天前的log文件,可根據需要修改 3、重啓數據庫 service mysqld restart
登陸後測試log_bin是否成功開啓:
mysql> show variables like '%log_bin%';
如果列表裏的 log_bin 值爲 on 說明已開啓mysql二進制日誌。 -
創建用戶,每一個從服務器都需要用到一個賬戶名和密碼來連接主服務器,可以爲每一個從服務器都創建一個賬戶,也可以讓全部服務器使用同一個賬戶。下面就爲同一個ip網段的所有從服務器創建一個只能進行主從同步的賬戶。
首先登陸mysql,然後創建一個用戶名爲rep,密碼爲123456的賬戶,該賬戶可以被192.168.253網段下的所有ip地址使用,且該賬戶只能進行主從同步。mysql> create user 'rep'@'192.168.33.%' identified by '111111'; mysql> grant replication slave on *.* to 'rep'@'192.168.33.%' ;
授權時如果報錯“Access denied”,可root用戶有沒有授權權限。
mysql> select host,user,grant_priv,Super_priv from mysql.user;
±----------±---------±-----------±-----------+
| host | user | grant_priv | Super_priv |
±----------±---------±-----------±-----------+
| 127.0.0.1 | root | Y | Y |
| localhost | root | N | Y |
| 10.0.3.% | repluser | N | N |
±----------±---------±-----------±-----------+
可以看到localhost的grant_priv的值爲N,也就是說root用戶不能授權給其他用戶,所以我們需要把這個值改爲Y。
mysql> update mysql.user set grant_priv=‘Y’ where host=‘localhost’;
mysql> flush privileges;
改完之後最好重啓一下服務器(我沒重啓還是會報那個錯)。 -
查看主服務器上當前的二進制日誌名
mysql> show master status\G # File: mysql-bin.000003 Position: 154
這裏的file 和position 要和slave上的一致,在下面配置slave時需要用到。
2.2 slave配置(192.168.33.4)
-
vim /etc/my.cnf
[mysqld] port=3306 server_id=4 #不能與其他mysql服務器重複 #加上以下參數可以避免更新不及時,SLAVE 重啓後導致的主從複製出錯。 read_only = 1 master_info_repository=TABLE relay_log_info_repository=TABLE #relay_log_recovery=1 #從機禁止寫 #super_read_only=1 #從機禁止寫
-
重啓mysql服務,登錄slave數據庫,並做如下設置:
mysql> stop slave; mysql> change master to -> master_host='192.168.33.3', #master的ip -> master_user='rep', #備份用戶名 -> master_password='111111', #密碼 -> master_log_file='mysql-bin.000003', #要與master的參數一致 -> master_log_pos=154; #要與master的參數一致 mysql> start slave;
-
查看slave從機的狀態:
mysql> show slave status \G
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
如上2個yes 代表設置成功。