linux下mysql的安裝及主從複製(主從同步)

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 移除已經安裝的早期版本

  1. 使用以下命令查看當前安裝mysql情況,查找以前是否裝有mysql
    rpm -qa | grep -i mysql 
    
  2. 如果有查詢結果,則說明之前安裝了,如:
    MySQL-client-5.5.25a-1.rhel5
    MySQL-server-5.5.25a-1.rhel5
  3. 停止mysql服務、刪除之前安裝的mysql
    刪除命令:
    rpm -e –nodeps 包名
    如: rpm -e –nodeps MySQL-client-5.5.25a-1.rhel5
    
    如果提示錯誤:error: %preun(xxxxxx) scriptlet failed, exit status 1,可嘗試一下命令:
    rpm -e --noscripts MySQL-client-5.5.25a-1.rhel5
    
  4. 查找之前mysql的目錄、並刪除
    find / -name mysql
    rm -rf /var/lib/mysql
    
    注意:卸載後/etc/my.cnf不會刪除,需要進行手工刪除.
    rm -rf /etc/my.cnf
    
  5. 再次查找機器是否安裝mysql,如果查詢無結果,說明已經卸載徹底,接下來直接安裝mysql即可。

1.3 linux mysql安裝

  1. 創建用戶和組(如果已經創建則跳過)

    groupadd mysql 
    useradd -r -g mysql mysql 
    
  2. 解壓,得到幾個壓縮文件,如:
    mysql-devel 開發用到的庫以及包含文件,
    mysql mysql 客戶端,
    mysql-server 數據庫服務器,

    tar -xvf mysql-5.7.23-1.el6.x86_64.rpm-bundle.tar
    
  3. 依次安裝
    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.rpm

    rpm -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

  4. 修改密碼
    安裝完後,使用命令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 安裝過程出現的問題:

  1. 其他設備在客戶端中打開表的速度非常慢(無論表的大小),甚至連接超時,但是直接登錄到服務器在本地連接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)

  1. 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二進制日誌。

  2. 創建用戶,每一個從服務器都需要用到一個賬戶名和密碼來連接主服務器,可以爲每一個從服務器都創建一個賬戶,也可以讓全部服務器使用同一個賬戶。下面就爲同一個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;
    改完之後最好重啓一下服務器(我沒重啓還是會報那個錯)。

  3. 查看主服務器上當前的二進制日誌名

    mysql> show master status\G #
        File: mysql-bin.000003
    Position: 154
    

    這裏的file 和position 要和slave上的一致,在下面配置slave時需要用到。

2.2 slave配置(192.168.33.4)

  1. 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 #從機禁止寫
    
  2. 重啓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;
    
  3. 查看slave從機的狀態:

    mysql> show slave status \G
    

    Slave_IO_Running: Yes
    Slave_SQL_Running: Yes
    如上2個yes 代表設置成功。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章