1. 程式人生 > >Centos7安裝MySQL5.7和主從複製配置

Centos7安裝MySQL5.7和主從複製配置

一:MySQL安裝

1、下載tar包,這裡使用wget從官網下載

wget https://dev.mysql.com/get/Downloads/MySQL-5.7/mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

2、將mysql安裝到/usr/local/mysql下

# 解壓
tar -xvf mysql-5.7.22-linux-glibc2.12-x86_64.tar.gz

# 移動
mv mysql-5.7.22-linux-glibc2.12-x86_64 /usr/local/

# 重新命名
mv /usr/local/mysql-5.7
.22-linux-glibc2.12-x86_64 /usr/local/mysql

3、新建data目錄

mkdir /usr/local/mysql/data

4、新建mysql使用者、mysql使用者組

# mysql使用者組
groupadd mysql

# mysql使用者
useradd mysql -g mysql

5、將/usr/local/mysql的所有者及所屬組改為mysql

chown -R mysql.mysql /usr/local/mysql

6、初始化mysql

/usr/local/mysql/bin/mysqld --user=mysql --basedir=
/usr/local/mysql/ --datadir=/usr/local/mysql/data --initialize # 如果出現以下錯誤, 則執行下面的命令來安裝numactl,然後再重新執行上面的mysqld命令 /usr/local/mysql/bin/mysqld: error while loading shared libraries: libnuma.so.1: cannot open shared object file: No such file or directory yum -y install numactl

7、編輯my.cnf

[mysqld]
datadir=/usr/local/mysql/data
basedir=
/usr/local/mysql socket=/tmp/mysql.sock user=mysql port=3306 character-set-server=utf8 # 取消密碼驗證 skip-grant-tables # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 # skip-grant-tables [mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid

8、開啟服務

# 將mysql加入服務
cp /usr/local/mysql/support-files/mysql.server /etc/init.d/mysql

# 開機自啟
chkconfig mysql on

# 啟動mysql服務
service mysql start

9、設定密碼

# 登入(由於/etc/my.cnf中設定了取消密碼驗證,所以此處密碼任意)
/usr/local/mysql/bin/mysql -u root -p

# 操作mysql資料庫
>use mysql;

# 修改密碼
>update user set authentication_string=password('你的密碼') where user='root';
>flush privileges;
>exit;

10、將/etc/my.cnf中的skip-grant-tables刪除

11、登入再次設定密碼(不知道為啥如果不再次設定密碼就操作不了資料庫了)

/usr/local/mysql/bin/mysql -u root -p
>ALTER USER 'root'@'localhost' IDENTIFIED BY '修改後的密碼';
>exit;

12、允許遠端連線

/usr/local/mysql/bin/mysql -u root -p

>use mysql;
>update user set host='%' where user = 'root';
>flush privileges;
>eixt;

13、新增快捷方式

ln -s /usr/local/mysql/bin/mysql /usr/bin
  1. 建立資料庫
CREATE DATABASE `testdb` DEFAULT CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

# 永久禁用防火牆(需要重啟虛擬機器)
systemctl disable firewalld.service
reboot

# 在虛擬機器上檢視一下IP地址
ifconfig

在這裡插入圖片描述
15、遠端連線mysql

mysql -h 172.16.128.128 -u root -p
> show databases;

在這裡插入圖片描述

注意:最好設定一下靜態ip地址,如果不設定ip可能會變,主從複製就不成功。


二:克隆多臺虛擬機器

克隆多臺虛擬機器: VMWare Fusion 虛擬機器–> 建立完整克隆

這裡克隆兩次,即總共3臺,克隆完成之後需要修改第二臺和第三臺的mysql的uuid值,隨便修改一下即可只要保證三臺機器的uuid不同即可

sudo vim /usr/local/mysql/data/auto.cnf

三:MySQL 主從複製配置(一主兩從)

①:master操作

  1. 修改master上的mysql配置檔案
    vi /etc/my.cnf

    [mysqld]
    # servier-id 每臺mysql都要不同
    server-id=1
    log-bin=mysql-bin
    
  2. 在Master建立賬戶並授權Slave

    # 授權一個使用者名稱為rep,密碼為root
    # *.*代表所有庫的所有表(可以指定庫.表)
    # ip代表只能該ip段下有許可權訪問, 即配置從伺服器的前兩個ip段即可,我的兩個slave都是172.16段
    mysql> grant replication slave on *.* to 'rep'@'172.16.xxx.%.%' identified by 'root';
    
  3. 重啟mysql服務
    service mysql restart;

  4. 檢視master狀態

    # File 和 Position 兩個欄位比較重要
    mysql> show master status;
    +------------------+----------+--------------+------------------+-------------------+
    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +------------------+----------+--------------+------------------+-------------------+
    | mysql-bin.000005 |      307 |              |                  |                   |
    +------------------+----------+--------------+------------------+-------------------+
    

② slave1操作

  1. 修改/etc/my.cnf

    [mysqld]
    server-id=2
    log-bin=relay-bin
    
  2. 重啟mysql
    service mysql restart;

  3. slave指定master資訊

    mysql> change master to
    mysql> master_host='172.16.128.128',
    mysql> master_port=3306,
    mysql> master_user='rep',
    mysql> master_password='root',
    mysql> master_log_file='mysql-bin.000005',
    mysql> master_log_pos=154;
    
  4. 啟動slave

    mysql> start slave;
    
    mysql> show slave status\G;
    *************************** 1. row ***************************
                   Slave_IO_State: Waiting for master to send event
                      Master_Host: 172.16.128.128
                      Master_User: rep
                      Master_Port: 3306
                    Connect_Retry: 60
                  Master_Log_File: mysql-bin.000005
              Read_Master_Log_Pos: 307
                   Relay_Log_File: yuslave1-relay-bin.000005
                    Relay_Log_Pos: 473
            Relay_Master_Log_File: mysql-bin.000005
                 # Slave_IO_Running和Slave_SQL_Running必須為Yes
                 Slave_IO_Running: Yes
                Slave_SQL_Running: Yes
    

Slave_IO_Running和Slave_SQL_Running必須為Yes,如果有一個為NO主從複製就不成功。
Slave_IO_Running: NO 之三大原因:https://blog.csdn.net/mqsyoung/article/details/78361469

③ slave2操作

修改/etc/my.cnf,其它步驟和slave1操作完全一樣

	[mysqld]
	server-id=3
	log-bin=relay-bin

④ 測試主從複製

# 在master上建立一個數據庫
mysql> create database testdb;
# 在slave1和slave2上看testdb是否存在
mysql> show databases;

參考文章: