38_資料庫實戰

鸟叔书發表於2024-03-13
一、 資料庫案例
  1. MySQL 容器案例
docker run -d -p 3306:3306 --privileged=true \
-v /data/mysql/log:/var/log/mysql \
-v /data/mysql/data:/var/lib/mysql \
-v /data/mysql/conf:/etc/mysql/conf.d \
-e MYSQL_ROOT_PASSWORD=123456 \
--name mysql mysql:5.7

# 配置 my.conf
[client]
default_character_set=utf8
[mysqld]
collation_server = utf8_general_ci
character_set_server = utf8
  1. Redis 實戰案例
docker run -d -p 6379:6379 --name myr3 --privileged=true
-v /app/redis/redis.conf:/etc/redis/redis.conf
-v /app/redis/data:/data
redis:6.0.8 redis-server /etc/redis/redis.conf
二、 安裝 mysql 主從複製
  1. 主庫 PORT=3307
docker run -p 3307:3306 \
    --name mysql-master \
    --privileged=true \
    -v /mydata/mysql-master/log:/var/log/mysql \
    -v /mydata/mysql-master/data:/var/lib/mysql \
    -v /mydata/mysql-master/conf:/etc/mysql \
    -v /mydata/mysql-master/tmp:/tmp/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:5.7

# 主庫配置  conf/my.cnf
[mysqld]
server_id=101              # 設定server_id, 同一區域網中需要唯一
binlog-ignore-db=mysql     # 指定不需要同步的資料庫名稱
log-bin=mall-mysql-bin     # 開啟二進位制日誌功能
binlog_cache_size=1M       # 設定二進位制日誌使用記憶體大小(事務)
binlog_format=mixed        # 設定使用的二進位制日誌格式(mixed,statement,row)
expire_logs_days=7         # 二進位制日誌過期清理時間.預設值為0, 表示不自動清理.
slave_skip_errors=1062     # 跳過主從複製中遇到的所有錯誤或指定型別的錯誤, 避免slave端複製中斷.
                           # 如:1062錯誤是指一些主鍵重複, 1032錯誤是因為主從資料庫資料不一致

# 配置slave
docker restart mysql-master
docker exec -it mysql-master /bin/bash
    mysql -uroot -proot
        CREATE USER 'slave'@'%' IDENTIFIED BY '123456';
        GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';
  1. 從庫 PORT=3308
docker run -p 3308:3306 \
    --name mysql-slave \
    --privileged=true \
    -v /mydata/mysql-slave/log:/var/log/mysql \
    -v /mydata/mysql-slave/data:/var/lib/mysql \
    -v /mydata/mysql-slave/conf:/etc/mysql \
    -v /mydata/mysql-slave/tmp:/tmp/mysql \
    -e MYSQL_ROOT_PASSWORD=root \
    -d mysql:5.7


# 從庫配置  conf/my.cnf
[mysqld]
server_id=102                     # 設定server_id, 同一區域網中需要唯一
binlog-ignore-db=mysql            # 指定不需要同步的資料庫名稱
log-bin=mall-mysql-slave1-bin     # 開啟二進位制日誌功能, 以備Slave作為其它資料庫例項的Master時使用
binlog_cache_size=1M              # 設定二進位制日誌使用記憶體大小(事務)
binlog_format=mixed               # 設定使用的二進位制日誌格式(mixed,statement,row)
expire_logs_days=7                # 二進位制日誌過期清理時間.預設值為0, 表示不自動清理.
slave_skip_errors=1062            # 跳過主從複製中遇到的所有錯誤或指定型別的錯誤, 避免slave端複製中斷.
                                  # 如:1062錯誤是指一些主鍵重複, 1032錯誤是因為主從資料庫資料不一致
relay_log=mall-mysql-relay-bin    # relay_log配置中繼日誌
log_slave_updates=1               # log_slave_updates表示slave將複製事件寫進自己的二進位制日誌
read_only=1                       # slave設定為只讀(具有super許可權的使用者除外)

docker restart mysql-slave

# 主庫中
show master status;


docker exec -it mysql-slave /bin/bash
mysql -uroot -proot

# 從庫配置主從複製
change master to master_host='宿主機ip', master_user='slave', master_password='123456', master_port=3307, master_log_file='mall-mysql-bin.000023', master_log_pos=617, master_connect_retry=30;

# 說明
master_host:          主資料庫的IP地址;
master_port:          主資料庫的執行埠;
master_user:          在主資料庫建立的用於同步資料的使用者賬號;
master_password:      在主資料庫建立的用於同步資料的使用者密碼;
master_log_file:      指定從資料庫要複製資料的日誌檔案, 透過檢視主資料的狀態, 獲取File引數;
master_log_pos:       指定從資料庫從哪個位置開始複製資料, 透過檢視主資料的狀態, 獲取Position引數;
master_connect_retry: 連線失敗重試的時間間隔, 單位為秒.


# 在從資料庫中檢視主從同步狀態
show slave status \G;
start slave;
show slave status\G;
  1. 分散式儲存演算法
哈西取餘分割槽
一致性雜湊分割槽
雜湊槽分割槽

相關文章