mysql 一主多從環境搭建


前期准備

  1. 三台服務器,服務器使用的是 centos7
  2. mysql-5.7.24-linux-glibc2.12-x86_64 安裝包 使用是版本是 mysql-5.7.24

數據庫安裝

  1. 將 mysql 安裝包上傳到三台服務器上,我使用 FlashFXP 作為上傳工具
  2. 解壓安裝包
  tar -zxvf mysql-5.7.24-linux-glibc2.12-x86_64.tar.gz 
  1. 創建需要安裝的路徑,之后移動剛才解壓的文件夾,同時重命名
  mkdir /app     #創建一個文件夾專門用來存放安裝的程序
  mv mysql-5.7.24-linux-glibc2.12-x86_64 /app/mysql  #移動文件並重命名

  1. 創建用戶組、用戶、文件夾、賦權
    groupadd mysql                  #創建用戶組
    useradd -r -g mysql mysql       #創建用戶 -r:建立系統賬號 -g:指定用戶組
    cd /app/mysql                   #切換到安裝目錄
    mkdir data                      #創建數據存放目錄
    mkdir mysql-log                 #創建日志存放目錄
    mkdir mysql-log/err-log
    mkdir mysql-log/slow-log
    mkdir mysql-log/bin-log         #主機需要此目錄
    chown -R root:mysql .           #將當前目錄以及字母里,所有者改變為 mysql,所屬組修改為 mysql
    chown -R mysql:mysql data
    chown -R mysql:mysql mysql-log
  1. 配置 /etc/my.cnf
    vi /etc/my.cnf
  • 主機配置文件:
[mysqld]
port = 3306                             #端口
basedir = /app/mysql                    #mysql安裝路徑
datadir = /app/mysql/data/              #mysql數據存放路徑
    
#日志設置
log-error = /app/mysql/mysql-log/err-log/db-err.log   #錯誤日志路徑
slow-query-log-file = /app/mysql/mysql-log/slow-log/db-slow.log  #慢SQL日志路徑
long-query-time = 3 #怎樣才算是慢sql,單位是秒

#開啟 binlog 同步
server_id = 0001                  #一個集群內的 MySQL 服務器 ID,全局唯一
log-bin = /app/mysql/mysql-log/bin-log/db-binlog      #開啟 Binlog 並寫明存放日志的位置
max-binlog-cache_size = 64M       #binlog 最大能夠使用cache的內存大小
max-binlog-size = 1G              #binlog 日志每達到設定大小后,會使用新的 binlog 日志
expire_logs_days = 15             #只保留最近15天的日志
binlog-format = mixed             #混合模式復制
innodb_flush_log_at_trx_commit = 2 #和 sync_binlog 控制MySQL磁盤寫入策略以及數據安全性
sync-binlog = 500                  #控制數據庫的binlog刷到磁盤上去

#性能調優配置
innodb_buffer_pool_size = 24576M   
max_connections = 5000
max_connect_errors = 6000
external-locking = FALSE
max_allowed_packet = 64M
join_buffer_size = 64M
sort_buffer_size = 2M
read_rnd_buffer_size = 16M 

#SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  • 從機配置文件:
[mysqld]
basedir = /app/mysql
datadir = /app/mysql/data
port = 3306
server_id = 0002 #這里需要在集群中保持唯一
    
#日志設置
expire_logs_days = 15
long-query-time = 3
slow-query-log-file=/app/mysql/mysql-log/slow-log/db-slow.log
log-error=/app/mysql/mysql-log/err-log/db-err.log
    
#主從設置
replicate-do-db=db_test     #需要從主庫同步的數據庫1
replicate-do-db=db_dev      #需要從主庫同步的數據庫2
read_only=1                 #只讀設置
    
#性能調優設置
innodb_buffer_pool_size = 24576M
max_connections = 5000
max_connect_errors = 6000
external-locking = FALSE
max_allowed_packet = 64M
join_buffer_size = 64M
sort_buffer_size = 2M
read_rnd_buffer_size = 16M 
    
#SQL模式
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
  1. 設置鏈接和服務
    cp /app/mysql/support-files/mysql.server /etc/init.d/mysql  # 可以使用service mysql start
    ln -s  /app/mysql/bin/mysql /usr/bin         #任何路徑可以使用 mysql 命令

數據庫初始化

  1. 初始化數據庫
    cd /app/mysql/bin/
    ./mysqld --defaults-file=/etc/my.cnf  --user=mysql --initialize  #初始化
  1. 查看密碼(初始化數據庫之后會生成一個 root 賬戶的默認密碼)
    cat /app/mysql/mysql-log/err-log/db-err.log


3. 啟動 mysql

    service mysql start
  1. 登錄並修改 root 密碼
    mysql -u root -p 
    set password = password('root');
    flush privileges;
    
    #如果需要 root 遠程連接,執行以下語句
    use mysql;
    update user set host = '%' where user = 'root';
    flush privileges;

創建用戶並賦權

  • 主機
    #需要創建用於和從機“通信”的用戶,具有同步權限,后續操作需要 
    grant replication slave on *.* to 'copy'@'%' identified by 'copy';
    flush privileges;
    
    #主機可以創建一個用戶用於訪問和操作某些特定的庫,不應該讓應用直接使用 root 用戶. 這里的 db_test 是創建的一個測試庫
    grant all privileges  on db_test.* to "app_user"@'%' identified by "app_user";
    flush privileges;
  • 從機
    #需要創建用於“只讀”權限的用戶
    grant select on db_test.* to 'readonly'@'%' identified by "readonly";
    flush privileges;

主從同步啟動

  • 主機
    #獲得 master 二進制日志文件名及位置
    show master status

  • 從機
    stop slave;     #暫停
    reset slave;    #重置
    change master to master_host="主機IP", master_user="copy",master_password="copy",master_log_file="db-binlog.000002",master_log_pos=2532; #設置和主機同步的用戶信息,日志文件信息
    start slave;    #啟動
    show slave status \G #查看從機狀態,主要是看 Slave_IO_Running Slave_SQL_Running 上是否都是 yes

驗證

  1. 主機和從機都創建數據庫 db_test
    create database db_test
  1. 主機數據庫新增表和數據,驗證從機是否同步成功

可能出現的問題

  1. 未開啟防火牆端口,導致無法通過遠程軟件訪問到數據庫,navicat 提示 10038
    #開啟防火牆 3306 端口
    firewall-cmd --zone=public --add-port=3306/tcp --permanent # centos7
    firewall-cmd --reload


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM