我有两个服务器都在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加入您的行列.