mysql主從架構部署和配置

mysql主從架構部署和配置

1. mysql常見集羣架構

  1. 主從架構(Master-Slaves)

    在實際應用場景中,mysql集羣90%是按照這種架構模式部署的。

    缺點:

    • master節點不能停機,停機就不能接收寫請求。
    • slave同步數據時會出現延遲。
    • 數據同步是單向的,當master停機,提升某個slave成爲master時,就會和之前的master數據不一致。
  2. 雙主架構(Master-Master)

    兩個mysql實例相互同步數據。

  3. 主從級聯架構(Master-Slaves-Slaves)

    解決讀壓力特別大的問題,缺點是slave延遲更加大了。

  4. 雙主+級聯架構

    這樣解決了master單點問題。

2. 部署mysql主從架構

2.1. mysql常用命令

# 下載Mysql源安裝包
wget http://dev.mysql.com/get/mysql57-community-release-el7-8.noarch.rpm
# yum安裝mysql源
yum localinstall mysql57-community-release-el7-8.noarch.rpm -y
# 檢查mysql源是否安裝成功
yum repolist enabled | grep "mysql.*-community.*"
# yum安裝Mysql
yum install mysql-community-server -y
# 啓動Mysql服務
systemctl start mysqld
# 並添加開機啓動
systemctl enable mysqld systemctl daemon-reload
# 查看Mysql狀態
systemctl status mysqld
# 查看默認的mysql密碼
vi /var/log/mysqld.log
# 修改mysql的密碼
# 登錄mysql,輸入原始密碼: =>g6hj.Nx4e (上面查看的原始密碼)
mysql -uroot -p
# 修改mysql的密碼
set password for 'root'@'localhost'=password('123456');
# 添加遠程登陸的用戶權限
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY '123456' WITH GRANT OPTION;
# 刷新權限
FLUSH PRIVILEGES;
# 接下來一些常用操作
# 修改mysql字符編碼
vi /etc/my.cnf
# 添加
character_set_server=utf8
init_connect='SET NAMES utf8'
# 重啓Mysql
systemctl stop mysqld
systemctl start mysqld
# 查看Mysql字符集
show variables like '%character%'

# 卸載
rpm -qa|grep -i mysql
yum remove mysql-community-server -y
rpm -ev mysql-community-libs-5.7.24-1.el7.x86_64 --nodeps
# 刪除文件
find / -name mysql
rm -rf /var/lib/mysql
rm -rf /etc/my.cnf

2.2. docker安裝mysql

接下來用docker安裝兩個mysql實例,並配置主從架構。

  1. 使用docker命令安裝兩個mysql實例:
docker run --name mysql3307 -p 3307:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=yc_test -e MYSQL_USER=yc -e MYSQL_PASSWORD=123456 -v /data/canyang3/docker-data/mysql3307/conf:/etc/mysql/conf.d -v /data/canyang3/docker-data/mysql3307/data/:/var/lib/mysql -v /data/canyang3/docker-data/mysql3307/logs/:/var/log/mysql -d mysql:5.7

docker run --name mysql3308 -p 3308:3306 --privileged=true -ti -e MYSQL_ROOT_PASSWORD=123456 -e MYSQL_DATABASE=yc_test -e MYSQL_USER=yc -e MYSQL_PASSWORD=123456 -v /data/canyang3/docker-data/mysql3308/conf:/etc/mysql/conf.d -v /data/canyang3/docker-data/mysql3308/data/:/var/lib/mysql -v /data/canyang3/docker-data/mysql3308/logs/:/var/log/mysql -d mysql:5.7

docker命令解讀:

docker run 
--name mysql3307 # 定義鏡像別名
-p 3307:3306 # 映射端口號
--privileged=true # docker鏡像獲取宿主機root權限
-it # 分配一個僞終端
-e MYSQL_ROOT_PASSWORD=123456 # 設置mysql root密碼爲123456
-e MYSQL_DATABASE=yc_test # 創建默認數據庫
-e MYSQL_USER=yc # 添加mysql用戶
-e MYSQL_PASSWORD=123456 # 添加mysql用戶密碼
-v /data/canyang3/docker-data/mysql3307/conf:/etc/mysql/conf.d # 掛載指定目錄到宿主機
-v /data/canyang3/docker-data/mysql3307/data/:/var/lib/mysql 
-v /data/canyang3/docker-data/mysql3307/logs/:/var/log/mysql 
-d mysql:5.7 # 後臺運行容器並返回容器ID

進入docker鏡像,查看mysql狀態

docker exec -it mysql3307 /bin/bash
service mysql status

2.2. 配置mysql主從關係

  1. 創建master mysql的配置,重啓鏡像

    vim /data/canyang3/docker-data/mysql3307/conf/my.cnf
    
    # 添加
    [mysqld]
    port=3306
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    default-storage-engine=INNODB
    symbolic-links=0
    lower_case_table_names=1
    server-id=10001
    log-bin=mysql-bin
    auto_increment_increment=2
    auto_increment_offset=1
    plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=10000
    
  2. 創建slave mysql的配置,重啓鏡像

    vim /data/canyang3/docker-data/mysql3308/conf/my.cnf
    
    # 添加
    [mysqld]
    port=3306
    character_set_server=utf8
    init_connect='SET NAMES utf8'
    default-storage-engine=INNODB
    symbolic-links=0
    lower_case_table_names=1
    server-id=10002
    log-bin=mysql-bin
    auto_increment_increment=2
    auto_increment_offset=2
    plugin-load="rpl_semi_sync_master=semisync_master.so;rpl_semi_sync_slave=semisync_slave.so"
    rpl_semi_sync_master_enabled=1
    rpl_semi_sync_master_timeout=10000
    
  3. 在master庫中添加同步數據賬號

    GRANT REPLICATION SLAVE,FILE,REPLICATION CLIENT ON *.* TO 'repluser'@'%' IDENTIFIED BY '123456';
    FLUSH PRIVILEGES;
    # 查看二進制日誌
    show  master status;
    
  4. 在slave中設置master信息

    change master to master_host='172.31.63.26',master_port=3307,master_user='repluser',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=3111;
    # 開啓slave,啓動sql和IO線程
    start slave;
    # 查看slave的狀態
    show slave status\G
    
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章