如何在 MySQL 5.5.20 中设置复制(主/从)?

vin*_*nny 5 mysql replication mysql-5.5

我有两台服务器都在 MySQL 5.5.20 上运行,我想设置复制,所以主服务器上的每个更新/插入都会立即反映在从服务器上。

我尝试遵循本教程(我使用了本网站上给出的说明。)但它不起作用。我发现在完成所有这些之后我不能......((((请用你的经验更新这部分)))

您能否建议我在 MySQL 5.5.20 中使用一种经过测试且有效的方法来执行此操作?

Rol*_*DBA 6

请创建此脚本

在 Linux 提示符下,打开类似 vi 的编辑器

vi /root/CreateMySQLSlave.sh
Run Code Online (Sandbox Code Playgroud)

并将这些行添加到它

MYSQL_MASTER_HOST=10.1.2.20
MYSQL_SLAVE_HOST=10.1.2.30
MYSQL_USER=root
MYSQL_PASS=rootpassword
MYSQL_CONN="-u${MYSQL_USER} -p${MYSQL_PASS}"
MYSQL_MASTER_CONN="-h${MYSQL_MASTER_HOST} ${MYSQL_CONN}"
MYSQL_SLAVE_CONN="-h${MYSQL_SLAVE_HOST} ${MYSQL_CONN}"

MYSQLDUMP_OPTIONS="--master-data=1"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --single-transaction"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --triggers"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --flush-privileges"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --all-databases"

CREATE_REPL_USER="GRANT REPLICATION SLAVE ON *.* TO repluser@'%' IDENTIFIED BY 'replpass'"
mysql ${MYSQL_MASTER_CONN} -AN -e"${CREATE_REPL_USER}"

RELOAD_FILE=/root/MySQLData.sql
echo "STOP SLAVE;" > ${RELOAD_FILE}
echo "CHANGE MASTER TO master_host='${MYSQL_MASTER_HOST}'," >> ${RELOAD_FILE}
echo "master_port=3306," >> ${RELOAD_FILE}
echo "master_user='repluser'," >> ${RELOAD_FILE}
echo "master_password='replpass'," >> ${RELOAD_FILE}
echo "master_log_file='dummy-file'," >> ${RELOAD_FILE}
echo "master_log_pos=1;" >> ${RELOAD_FILE}
mysqldump ${MYSQL_MASTER_CONN} ${MYSQLDUMP_OPTIONS} >> ${RELOAD_FILE}
echo "START SLAVE;" >> ${RELOAD_FILE}

mysql ${MYSQL_SLAVE_CONN} -A < ${RELOAD_FILE}
Run Code Online (Sandbox Code Playgroud)

接下来,使文件可执行并运行它

chmod +x /root/CreateMySQLSlave.sh
/root/CreateMySQLSlave.sh
Run Code Online (Sandbox Code Playgroud)

就是这样 !!!

确保您设置了 IP 地址MYSQL_MASTER_HOSTMYSQL_SLAVE_HOST

顺便说一句,不要担心dummy-file.master_log_file 参数中的CHANGE MASTER TO。由于--master-data=1. 您可以通过对转储文件执行此操作来查看它

head -29 /root/MySQLData.sql | tail -1
Run Code Online (Sandbox Code Playgroud)

确保已在主服务器上启用二进制日志记录。您可以通过以下方式判断:运行SHOW MASTER STATUS;。如果您一无所获,则需要像这样启用它:

将此添加到 /etc/my.cnf

[mysqld]
log-bin=mysql-bin
Run Code Online (Sandbox Code Playgroud)

然后重启mysql

好的,它负责 Master 的二进制日志记录。

您还需要确保 Master 和 Slave 具有不同的服务器 ID。您可以通过以下方式判断:

运行SHOW VARIABLES LIKE 'server_id';如果结果显示为1,则必须明确设置它。

转到 Master 并将其添加到 /etc/my.cnf

[mysqld]
server-id=1
Run Code Online (Sandbox Code Playgroud)

转到 Slave 并将其添加到 /etc/my.cnf

[mysqld]
server-id=2
Run Code Online (Sandbox Code Playgroud)

这里的主要事情是确保server_id在 master 和 Slave 的 my.cnf 中明确设置。您还必须确保 server_id 值与复制拓扑中涉及的所有其他服务器不同。

如果您是新手,请让系统管理员加入您的行列。