MySQL 主從複寫是實現資料庫高可用、讀寫分離與災備的核心技術。本文以 CentOS 5.x、MySQL 5.5.33 為例,詳細記錄從原始碼編譯安裝到主從同步驗證的完整流程。
| 角色 | IP 位址 | 說明 |
|---|---|---|
| Master (主庫) | 192.168.10.151 | 提供寫入服務,啟用 Binlog |
| Slave (從庫) | 192.168.10.152 | 同步主庫資料,提供讀取服務 |
安裝依賴套件:
yum -y install gcc gcc-c++ libtool-libs autoconf freetype-devel gd libjpeg-devel \
libpng-devel libxml2-devel ncurses-devel zlib-devel zip unzip curl-devel wget crontabs \
file bison cmake patch mlocate flex diffutils automake make kernel-devel cpp \
readline-devel openssl-devel vim-minimal glibc-devel glib2-devel \
bzip2-devel e2fsprogs-devel libidn-devel gettext-devel expat-devel \
libcap-devel libtool-ltdl-devel pam-devel pcre-devel libmcrypt-devel
# 建立用戶與群組
groupadd mysql
useradd -g mysql mysql
# 解壓與編譯安裝
tar zxf mysql-5.5.33.tar.gz && cd mysql-5.5.33
cmake -DCMAKE_INSTALL_PREFIX=/usr/local/mysql \
-DMYSQL_UNIX_ADDR=/tmp/mysql.sock \
-DDEFAULT_CHARSET=utf8 \
-DDEFAULT_COLLATION=utf8_general_ci \
-DWITH_EXTRA_CHARSETS=complex \
-DWITH_READLINE=1 \
-DENABLED_LOCAL_INFILE=1
make && make install
# 權限與初始化
chmod +w /usr/local/mysql
chown -R mysql:mysql /usr/local/mysql
cd support-files
cp my-medium.cnf /etc/my.cnf
cp -f mysql.server /etc/rc.d/init.d/mysqld
mkdir /var/lib/mysql
/usr/local/mysql/scripts/mysql_install_db --defaults-file=/etc/my.cnf \
--basedir=/usr/local/mysql --datadir=/var/lib/mysql --user=mysql
# 設定開機自啟與庫路徑
chmod +x /etc/rc.d/init.d/mysqld
chkconfig --add mysqld
chkconfig mysqld on
cat > /etc/ld.so.conf.d/mysql.conf <
Slave 端安裝步驟完全相同,此處略過。
[mysqld]
log-bin=master-bin
log-bin-index=master-bin.index
server-id = 1
innodb_file_per_table = 1
binlog_format=mixed
建立複寫專用帳號:
mysql -u root -p
GRANT REPLICATION SLAVE ON *.* TO 'dbmysql'@'%' IDENTIFIED BY '123456';
FLUSH PRIVILEGES;
重啟 MySQL:service mysqld restart
[mysqld]
relay-log = relay-log
relay-log-index = relay-log.index
server-id = 2
innodb_file_per_table = 1
binlog_format=mixed
重啟 MySQL:service mysqld restart
在 Master 查看 Binlog 狀態:
mysql> SHOW MASTER STATUS;
+-------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+-------------------+----------+--------------+------------------+
| master-bin.000001 | 107 | | |
+-------------------+----------+--------------+------------------+
在 Slave 設定同步參數並啟動:
mysql> CHANGE MASTER TO
MASTER_HOST='192.168.10.151',
MASTER_USER='dbmysql',
MASTER_PASSWORD='123456',
MASTER_LOG_FILE='master-bin.000001',
MASTER_LOG_POS=107;
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G
關鍵指標均為 Yes 即同步成功:
Slave_IO_Running: YesSlave_SQL_Running: YesSeconds_Behind_Master: 0iptables -I INPUT -p tcp --dport 3306 -j ACCEPTbinlog_format=ROW、優化 Slave SQL 執行緒、確保網路延遲低。pt-table-checksum 定期校驗,必要時重新同步。-- Master 建立測試資料庫
mysql> CREATE DATABASE emlog;
-- Slave 查看是否同步
mysql> SHOW DATABASES;
+--------------------+
| Database |
+--------------------+
| information_schema |
| emlog |
| mysql |
| performance_schema |
| test |
+--------------------+
出現 emlog 即代表主從複寫部署成功。