一、下載解壓包
打開 MySQL 官網地址:https://dev.mysql.com/downloads/mysql/ ,選擇面安裝版本。

二、解壓文件
下載到合適文件夾,解壓壓縮包。

解壓 mysql-8.0.22-macos10.15-x86_64.tar.gz 三份,分別命名文件夾為 master、slave1、slave2

三、編輯數據庫配置文件
在 master 文件夾下的 support-files 文件夾下面新建 my.conf 配置文件
[client]
default-character-set=utf8
#password = your_password
port = 3306
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
#這是報錯 Another process with pid 77346 is using unix socket file.
#客戶端也需要這個和服務端的一致
socket = /Users/zeyangg/SynologyDrive/ee/mysql/master/mysql.sock
[mysqld]
event_scheduler=ON
character-set-server=utf8
init_connect='SET NAMES utf8
port = 3306
mysqlx_port = 33060
bind-address=127.0.0.1
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
socket = /Users/zeyangg/SynologyDrive/ee/mysql/master/mysql.sock
mysqlx_socket= /Users/zeyangg/SynologyDrive/ee/mysql/master/mysqlx.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character-set-server=utf8
init_connect='SET NAMES utf8'
#修改mysql的主目錄
basedir=/Users/zeyangg/SynologyDrive/ee/mysql/master
#添加data文件的目錄,存儲各種數據和日志
datadir=/Users/zeyangg/SynologyDrive/ee/mysql/master/data
log-bin=mysql-bin
binlog_format=mixed
server-id = 1
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
在 slave1 文件夾下的 support-files 文件夾下面新建 my.conf 配置文件
[client]
default-character-set=utf8
#password = your_password
#修改端口號不要和主庫一致
port = 3316
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
#這是報錯 Another process with pid 77346 is using unix socket file.
#客戶端也需要這個和服務端的一致
socket = /Users/zeyangg/SynologyDrive/ee/mysql/slave1/mysql.sock
[mysqld]
event_scheduler=ON
character-set-server=utf8
init_connect='SET NAMES utf8
#修改端口號
port = 3316
mysqlx_port = 33061
bind-address=127.0.0.1
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
socket = /Users/zeyangg/SynologyDrive/ee/mysql/slave1/mysql.sock
mysqlx_socket= /Users/zeyangg/SynologyDrive/ee/mysql/slave1/mysqlx.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character-set-server=utf8
init_connect='SET NAMES utf8'
#修改mysql的主目錄
basedir=/Users/zeyangg/SynologyDrive/ee/mysql/slave1
#添加data文件的目錄,存儲各種數據和日志
datadir=/Users/zeyangg/SynologyDrive/ee/mysql/slave1/data
log-bin=mysql-bin
binlog_format=mixed
#不要和主庫一致
server-id = 2
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
在 slave2 文件夾下的 support-files 文件夾下面新建 my.conf 配置文件
[client]
default-character-set=utf8
#password = your_password
#修改端口號不要和主庫一致
port = 3326
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
#這是報錯 Another process with pid 77346 is using unix socket file.
#客戶端也需要這個和服務端的一致
socket = /Users/zeyangg/SynologyDrive/ee/mysql/slave2/mysql.sock
[mysqld]
event_scheduler=ON
character-set-server=utf8
init_connect='SET NAMES utf8
#修改端口號
port = 3326
mysqlx_port = 33062
#修改的socket文件的位置,默認是走的/tmp下的mysql.sock會有沖突
socket = /Users/zeyangg/SynologyDrive/ee/mysql/slave2/mysql.sock
mysqlx_socket= /Users/zeyangg/SynologyDrive/ee/mysql/slave2/mysqlx.sock
skip-external-locking
key_buffer_size = 16M
max_allowed_packet = 1M
table_open_cache = 64
sort_buffer_size = 512K
net_buffer_length = 8K
read_buffer_size = 256K
read_rnd_buffer_size = 512K
myisam_sort_buffer_size = 8M
character-set-server=utf8
init_connect='SET NAMES utf8'
#修改mysql的主目錄
basedir=/Users/zeyangg/SynologyDrive/ee/mysql/slave2
#添加data文件的目錄,存儲各種數據和日志
datadir=/Users/zeyangg/SynologyDrive/ee/mysql/slave2/data
log-bin=mysql-bin
binlog_format=mixed
#不要和主庫一致
server-id = 3
sql_mode=NO_ENGINE_SUBSTITUTION,STRICT_TRANS_TABLES
[mysqldump]
quick
max_allowed_packet = 16M
[mysql]
no-auto-rehash
# Remove the next comment character if you are not familiar with SQL
#safe-updates
default-character-set=utf8
[myisamchk]
key_buffer_size = 20M
sort_buffer_size = 20M
read_buffer = 2M
write_buffer = 2M
[mysqlhotcopy]
interactive-timeout
四、數據庫初始化
使用命令行進入對應目錄,執行以下語句
# 進入 master 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/master/bin
# 執行 master 初始化
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/master/support-files/my.cnf --initialize-insecure
# 進入 slave1 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave1/bin
# 執行 slave1 初始化
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/slave1/support-files/my.cnf --initialize-insecure
# 進入 slave2 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave2/bin
# 執行 slave2 初始化
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/slave2/support-files/my.cnf --initialize-insecure
執行過程中可能出現提示 mysqld 不安全

選擇 Cancel,然后進入系統安全里面,選擇 allow anyway,然后再次執行上述命令,選擇 open 就可以繼續運行了。

五、啟動主數據庫
分別啟動對應數據庫
# 進入 master 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/master/bin
# 啟動 master
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/master/support-files/my.cnf
# 進入 slave1 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave1/bin
# 啟動 slave1
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/slave1/support-files/my.cnf
# 進入 slave2 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave2/bin
# 啟動 slave2
./mysqld --defaults-file=/Users/zeyangg/SynologyDrive/ee/mysql/slave2/support-files/my.cnf
啟動 master 截圖如下

六、創建用戶
# 進入 master 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/master/bin
# 進入主 master 庫
./mysql -h 127.0.0.1 -uroot -P3306
# 創建用戶(此處使用隨機生成密碼,需要記住密碼)
# create user 'holddie'@'%' identified by '123456';
create user 'holddie'@'%' IDENTIFIED BY RANDOM PASSWORD;
# 授權遠程同步
grant replication slave on *.* to 'holddie'@'%';
# 保存刷新
flush privileges;
# 查看主庫的狀態
show master status\G;
查看主庫的狀態

從庫連接主庫
# 進入 slave1 從庫的狀態
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave1/bin
# 在從庫使用剛才主庫創建的賬號,連接一次,看否賬號可用(使用剛才創建賬號對應的密碼)
./mysql -h 127.0.0.1 -uholddie -P3306
# 如果登錄沒有問題則 quit 退出,進入 slave1 自己數據庫
./mysql -h 127.0.0.1 -uroot -P3316
# 使用命令 (注意此處替換自己創建數據庫賬號,以及修改對應 master_log_file 名稱以及偏移位置)
change master to master_host='127.0.0.1',master_port=3306,master_user='holddie',master_password='VrQ>-YtFPGw&-sJ,hI2Q', master_log_file='mysql-bin.000004',master_log_pos=156;
# 啟動 slave1 同步
start slave;
# 查看同步狀態
show salve status;

注意觀察 Slave_IO_Running 和 Slave_SQL_Running 的狀態值,只有都為 Yes 的時候才表明同步 ok,同理 Slave2 也是相同的操作步驟。
查看同步狀態
# 進入 slave1 目錄
cd /Users/zeyangg/SynologyDrive/ee/mysql/slave1/bin
./mysql -h 127.0.0.1 -uroot -P3316
show salve status;

注意觀察 Slave_IO_Running 和 Slave_SQL_Running 的狀態值,只有都為 Yes 的時候才表明同步 ok,同理 Slave2 也是相同的操作步驟。
此時我們使用 DataGrip 連接數據庫,在 master 修改數據,然后在從庫查看,是否數據同步。
