Mac MySQL 8.0 (免安裝版) 主從集群搭建


一、下載解壓包

打開 MySQL 官網地址:https://dev.mysql.com/downloads/mysql/ ,選擇面安裝版本。

二、解壓文件

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

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

三、編輯數據庫配置文件

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 修改數據,然后在從庫查看,是否數據同步。


免責聲明!

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



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