MySQL 集群部署是一種實(shí)現(xiàn)高可用性和負(fù)載均衡的方法。分布式數(shù)據(jù)庫系統(tǒng)通過將數(shù)據(jù)分布在多個(gè)節(jié)點(diǎn)上,增加了數(shù)據(jù)庫系統(tǒng)的可擴(kuò)展性和容錯(cuò)性。在 MySQL 集群中,數(shù)據(jù)分片和復(fù)制是兩個(gè)重要的概念。
數(shù)據(jù)分片是指將整個(gè)數(shù)據(jù)庫分成多個(gè)分片,每個(gè)分片獨(dú)立存儲(chǔ)數(shù)據(jù)。分片可以根據(jù)數(shù)據(jù)的不同屬性進(jìn)行分割,例如按用戶 ID 或地理位置分割。分片可以使得查詢分散在各個(gè)節(jié)點(diǎn)上,提高查詢性能。
數(shù)據(jù)復(fù)制是指將數(shù)據(jù)從一個(gè)節(jié)點(diǎn)復(fù)制到其他節(jié)點(diǎn)。復(fù)制可以提高讀取性能和容錯(cuò)性,因?yàn)榧词挂粋€(gè)節(jié)點(diǎn)故障,數(shù)據(jù)仍然可以從其他節(jié)點(diǎn)讀取。在 MySQL 中,復(fù)制是通過二進(jìn)制日志(binlog)和復(fù)制日志(relay log)實(shí)現(xiàn)的。
以下是一個(gè)簡單的 MySQL 集群部署示例:
# 安裝 MySQL sudo apt-get install mysql-server # 創(chuàng)建數(shù)據(jù)庫和用戶 mysql -uroot -p CREATE DATABASE mydb; CREATE USER 'user'@'%' IDENTIFIED BY 'password'; GRANT ALL PRIVILEGES ON mydb.* TO 'user'@'%'; # 配置主節(jié)點(diǎn) sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # 在 [mysqld] 段中添加以下配置 server-id=1 log-bin=/var/log/mysql/mysql-bin.log binlog-do-db=mydb # 重啟 MySQL sudo systemctl restart mysql # 配置從節(jié)點(diǎn) sudo vi /etc/mysql/mysql.conf.d/mysqld.cnf # 在 [mysqld] 段中添加以下配置 server-id=2 relay-log=/var/log/mysql/mysql-relay-bin.log relay-log-index=/var/log/mysql/mysql-relay-bin.index log-slave-updates=1 # 啟動(dòng)從節(jié)點(diǎn) sudo systemctl start mysql # 在主節(jié)點(diǎn)創(chuàng)建表和數(shù)據(jù) mysql -uroot -p -e "USE mydb; CREATE TABLE mytable (id INT PRIMARY KEY, name VARCHAR(255)); INSERT INTO mytable VALUES (1, 'John'), (2, 'Jane'), (3, 'Bob');" # 在從節(jié)點(diǎn)查詢數(shù)據(jù) mysql -uuser -p -h主節(jié)點(diǎn)IP地址 -e "SELECT * FROM mydb.mytable;"
以上示例展示了如何在主節(jié)點(diǎn)上啟用二進(jìn)制日志并只復(fù)制特定的數(shù)據(jù)庫,同時(shí)在從節(jié)點(diǎn)上啟用中繼日志并記錄從主節(jié)點(diǎn)接收到的更新。在實(shí)際部署中,還需要考慮負(fù)載均衡和故障轉(zhuǎn)移等其他問題。