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

我有两个服务器都在MySQL 5.5.20上运行,我想设置复制,因此Master上的每个更新/插入都会立即反映在Slave机器上.

我尝试过本教程(I used instructions given on this website.),但它无法正常工作.我发现在完成所有这些之后我无法……(((请根据您的经验更新此部分)))

你可以在MySQL 5.5.20中建议我一个经过测试和有效的方法吗?

解决方法:

请创建此脚本

在Linux提示下,打开像vi这样的编辑器

vi /root/CreateMySQLSlave.sh

并将这些行添加到它

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}

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

chmod +x /root/CreateMySQLSlave.sh
/root/CreateMySQLSlave.sh

而已 !!!

确保为MYSQL_MASTER_HOST和MYSQL_SLAVE_HOST设置IP地址

顺便说一句,不要担心CHANGE MASTER TO的master_log_file参数中的虚拟文件.由于–master-data = 1,转储文件的第29行应该具有正确的设置.您可以通过对转储文件执行此操作来查看它

head -29 /root/MySQLData.sql | tail -1

确保主服务器上已启用二进制日志记录.以下是如何判断:运行SHOW MASTER STATUS;.如果你什么也得不到,你需要像这样启用它:

将其添加到/etc/my.cnf

[mysqld]
log-bin=mysql-bin

然后重启mysql

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

您还需要确保主服务器和从服务器具有不同的服务器ID.您可以这样告诉我们:

运行SHOW VARIABLES LIKE’server_id’;如果结果为1,则必须明确设置.

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

[mysqld]
server-id=1

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

[mysqld]
server-id=2

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

如果您是新手,请让sysadmin加入您的行列.

上一篇:Redis+Django(Session,Cookie)的用户系统


下一篇:Build MySQL Replication Environment