我目前正在为我的数据库设置复制,我正在考虑在不写锁定主站的情况下同步主站和从站的方法之一,是首先获取日志位置然后执行备份,然后在从站上恢复备份并开始具有日志位置的从站(将在进行备份之前),我看到这种方法的问题之一是从站将重新应用对其自身的更改,这在我们拥有的系统类型中不是问题,是否任何其他人看到这种方法的任何其他陷阱?或者有没有其他更好的选择来实现这一目标?
Rol*_*DBA 12
您可以尝试两种不停机或停机时间最短的方法
鉴于以下情况:
10.1.20.30
10.1.20.40
这是非常简单的。
STEP01) 如果 Master 没有server-id
在 my.cnf 中定义,你必须添加它
[mysqld]
server-id=100
Run Code Online (Sandbox Code Playgroud)
STEP02) 如果log-bin
在 my.cnf中没有定义Master,则必须添加它
[mysqld]
log-bin=mysql-bin
Run Code Online (Sandbox Code Playgroud)
STEP03) 如果您已经在 Master 上执行了第 1 步和/或第 2 步,请执行service mysql restart
(强制)
STEP04) 在 Master 上创建 MySQL 复制用户
mysql> GRANT SELECT,REPLICATION USER,REPLICATION CLIENT ON *.*
TO repluser@'10.1.2.30' IDENTIFIED BY 'replpass';
Run Code Online (Sandbox Code Playgroud)
STEP05) 在 Master 上创建一个 mysqldump 作为时间点快照
MYSQL_CONN="-uroot -ppassword"
MYSQLDUMP_OPTIONS="--master-data=1 --single-transaction --flush-privileges"
MYSQLDUMP_OPTIONS="${MYSQLDUMP_OPTIONS} --routines --triggers --all-databases"
mysqldump ${MYSQL_CONN} ${MYSQLDUMP_OPTIONS} > MySQLData.sql
Run Code Online (Sandbox Code Playgroud)
完成后,第 22 行MySQLData
应该有 mysqldump 启动时 Master 的二进制日志和位置。要看到它,只需运行
head -22 MySQLData.sql | tail -1
Run Code Online (Sandbox Code Playgroud)
STEP06) 在 Slave 上创建复制状态
CHANGE MASTER TO
MASTER_HOST='10.1.20.30',
MASTER_PORT=3306,
MASTER_USER='repluser',
MASTER_PASSWORD='replpass',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=4;
Run Code Online (Sandbox Code Playgroud)
STEP 07) 将 mysqldump 加载到 Slave
mysql -u... -p... < MySQLData.sql
Run Code Online (Sandbox Code Playgroud)
不要担心从正确的位置开始复制。请记住,我说过第 22 行包含具有正确二进制日志和位置的命令。
步骤 08) 运行 SHOW SLAVE STATUS\G
如果Slave_IO_Running
是Yes
和Slave_SQL_Running
是Yes
,恭喜!!!
与其重新发明轮子,不如阅读我之前关于使用 rsync 制作 Slave 的帖子
Jul 08, 2011
-没有主站停机时间的 MySQL 从站复制重置(使用 MyISAM)May 23, 2011
-如何将数据库从一台服务器移动到另一台服务器?Apr 08, 2011
-从另一个从站创建一个 MySQL 从站,但将其指向主站试一试 !!!
归档时间: |
|
查看次数: |
13496 次 |
最近记录: |