vin*_*nny 5 mysql replication mysql-5.5
我有两台服务器都在 MySQL 5.5.20 上运行,我想设置复制,所以主服务器上的每个更新/插入都会立即反映在从服务器上。
我尝试遵循本教程(我使用了本网站上给出的说明。)但它不起作用。我发现在完成所有这些之后我不能......((((请用你的经验更新这部分)))
您能否建议我在 MySQL 5.5.20 中使用一种经过测试且有效的方法来执行此操作?
请创建此脚本
在 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_HOST
和MYSQL_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 值与复制拓扑中涉及的所有其他服务器不同。
如果您是新手,请让系统管理员加入您的行列。
归档时间: |
|
查看次数: |
8479 次 |
最近记录: |