<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>服务器安全维护工作室 &#187; XtraBackup不停机不锁表搭建MySQL主从同步教程</title>
	<atom:link href="https://www.fuwuqiok.com/tag/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/feed/" rel="self" type="application/rss+xml" />
	<link>https://www.fuwuqiok.com</link>
	<description></description>
	<lastBuildDate>Sun, 01 Mar 2020 07:28:40 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>https://wordpress.org/?v=4.2.26</generator>
	<item>
		<title>XtraBackup不停机不锁表搭建MySQL主从同步教程</title>
		<link>https://www.fuwuqiok.com/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/</link>
		<comments>https://www.fuwuqiok.com/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/#comments</comments>
		<pubDate>Sun, 23 Aug 2015 10:14:06 +0000</pubDate>
		<dc:creator><![CDATA[admin]]></dc:creator>
				<category><![CDATA[aliyun服务器代维]]></category>
		<category><![CDATA[网站代维]]></category>
		<category><![CDATA[XtraBackup不停机不锁表搭建MySQL主从同步教程]]></category>
		<category><![CDATA[阿里云代维]]></category>

		<guid isPermaLink="false">https://www.fuwuqiok.com/?p=2690</guid>
		<description><![CDATA[<p>前言 Percona XtraBackup可以说是一个相对完美的免费开源数据备份工具，支持在线无锁表同步复制和 [&#8230;]</p>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/">XtraBackup不停机不锁表搭建MySQL主从同步教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></description>
				<content:encoded><![CDATA[<p><a href="https://www.fuwuqiok.com/wp-content/uploads/2015/08/02ftb7pa.jpeg"><img class="attachment-medium" src="https://www.fuwuqiok.com/wp-content/uploads/2015/08/02ftb7pa.jpeg" alt="02ftb7pa" width="562" height="580" /></a></p>
<h2 id="前言">前言</h2>
<p>Percona XtraBackup可以说是一个相对完美的免费开源数据备份工具，支持在线无锁表同步复制和可并行高效率的安全备份恢复机制相比<code>mysqldump</code>来说确实让人眼前一亮，与<code>MySQL Enterprise Backup(InnoDB Hot Backup)</code>的功能对比可以参考扩展阅读。当然我们在实际运维过程中都应针对不同的业务需求分析和选择合适的备份恢复方案，这篇文章就是针对MySQL多实例且一个实例对应多个database的情况，实现MySQL在线不停机不锁表的主从同步，日后再继续更新分享基于<code>XtraBackup</code>的其它实用技能。</p>
<blockquote><p>XtraBackup是目前首选的备份方案之一</p>
<h2 id="原理">原理</h2>
<h3 id="MySQL主从同步原理">MySQL主从同步原理</h3>
<p>MySQL主从同步是在 MySQL主从复制(Master-Slave Replication)基础上实现的，通过设置在Master MySQL上的binlog(使其处于打开状态)，Slave MySQL上通过一个I/O线程从Master MySQL上读取binlog，然后传输到Slave MySQL的中继日志中，然后Slave MySQL的SQL线程从中继日志中读取中继日志，然后应用到Slave MySQL的数据库中。这样实现了主从数据同步功能。</p>
<h3 id="XtraBackup备份原理">XtraBackup备份原理</h3>
<p>innobackupex在后台线程不断追踪 InnoDB的日志文件，然后复制InnoDB的数据文件。数据文件复制完成之后，日志的复制线程也会结束。这样就得到了不在同一时间点的数据副本和开始 备份以后的事务日志。完成上面的步骤之后，就可以使用InnoDB崩溃恢复代码执行事务日志（redo log），以达到数据的一致性。<br />
备份分为两个过程：</p>
<ol>
<li>backup，备份阶段，追踪事务日志和复制数据文件（物理备份）。</li>
<li>preparing，重放事务日志，使所有的数据处于同一个时间点，达到一致性状态。</li>
</ol>
<h3 id="XtraBackup的优点">XtraBackup的优点</h3>
<ol>
<li>可以快速可靠的完成数据备份（复制数据文件和追踪事务日志）</li>
<li>数据备份过程中不会中断事务的处理（热备份）</li>
<li>节约磁盘空间和网络带宽</li>
<li>自动完成备份鉴定</li>
<li>因更快的恢复时间而提高在线时间</li>
</ol>
<h2 id="配置">配置</h2>
<h3 id="准备工作">准备工作</h3>
<blockquote><p>MySQL步骤和my.cnf配置</p>
<pre><span class="line">#原有主数据库版本</span>
<span class="line">mysql -V</span>
<span class="line">mysql  Ver 14.14 Distrib 5.5.31, for Linux (x86_64) using readline 5.1</span>

<span class="line">#迁移从数据库版本</span>
<span class="line">mysql -V</span>
<span class="line">mysql  Ver 14.14 Distrib 5.6.25, for linux-glibc2.5 (x86_64) using  EditLine wrapper</span>

<span class="line">#检查数据库引擎</span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">engines</span>;</span></span>

<span class="line">+<span class="comment">--------------------+---------+----------------------------------------------------------------+--------------+------+------------+</span></span>
<span class="line">| Engine             | Support | Comment                                                        | Transactions | XA   | Savepoints |</span>
<span class="line">+<span class="comment">--------------------+---------+----------------------------------------------------------------+--------------+------+------------+</span></span>
<span class="line">| MRG_MYISAM         | YES     | Collection of identical MyISAM tables                          | NO           | NO   | NO         |</span>
<span class="line">| CSV                | YES     | CSV storage engine                                             | NO           | NO   | NO         |</span>
<span class="line">| MyISAM             | YES     | MyISAM storage engine                                          | NO           | NO   | NO         |</span>
<span class="line">| BLACKHOLE          | YES     | /dev/null storage engine (anything you write to it disappears) | NO           | NO   | NO         |</span>
<span class="line">| MEMORY             | YES     | Hash based, stored in memory, useful for temporary tables      | NO           | NO   | NO         |</span>
<span class="line">| InnoDB             | DEFAULT | Supports transactions, row-level locking, and foreign keys     | YES          | YES  | YES        |</span>
<span class="line">| ARCHIVE            | YES     | Archive storage engine                                         | NO           | NO   | NO         |</span>
<span class="line">| PERFORMANCE_SCHEMA | YES     | Performance Schema                                             | NO           | NO   | NO         |</span>
<span class="line">| FEDERATED          | NO      | Federated MySQL storage engine                                 | NULL         | NULL | NULL       |</span>
<span class="line">+<span class="comment">--------------------+---------+----------------------------------------------------------------+--------------+------+------------+</span></span>


<span class="line">#主从数据库同步注意点</span>
<span class="line">[mysqld]</span>
<span class="line">#主从之间的id不能相同</span>
<span class="line">server-id</span>
<span class="line">#启用二进制日志</span>
<span class="line">log-bin</span>
<span class="line">#一般在从库开启（可选）</span>
<span class="line">read_only</span>
<span class="line">#推荐使用InnoDB并做好相关配置</span>


<span class="line">#检查主从数据库状态</span>
<span class="line">mysql -S /tmp/mysql.sock -e "<span class="operator"><span class="keyword">show</span> <span class="keyword">global</span> <span class="keyword">variables</span> <span class="keyword">like</span> <span class="string">'server_id'</span>;</span>"</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>
<span class="line">| Variable_name | Value |</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>
<span class="line">| server_id     | 1     |</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>

<span class="line">mysql -S /tmp/mysql.sock -e "<span class="operator"><span class="keyword">show</span> <span class="keyword">global</span> <span class="keyword">variables</span> <span class="keyword">like</span> <span class="string">'log_bin'</span>;</span>"</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>
<span class="line">| Variable_name | Value |</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>
<span class="line">| log_bin       | ON    |</span>
<span class="line">+<span class="comment">---------------+-------+</span></span>


</pre>
<h3 id="安装percona-xtrabackup">安装percona-xtrabackup</h3>
<blockquote><p>一般推荐rpm安装 &#8211; <a href="https://www.percona.com/downloads/XtraBackup/LATEST/" target="_blank" rel="external">https://www.percona.com/downloads/XtraBackup/LATEST/</a></p></blockquote>
<figure class="highlight bash">
<table>
<tbody>
<tr>
<td class="code">
<pre><span class="line">yum -y install perl perl-devel libaio libaio-devel perl-Time-HiRes perl-DBD-MySQL</span>
<span class="line"><span class="comment">#rpm -ivh percona-xtrabackup-2.2.12-1.el6.x86_64.rpm </span></span>
<span class="line">rpm -Uvh percona-xtrabackup-<span class="number">2.2</span>.<span class="number">12</span>-<span class="number">1</span>.el6.x86_64.rpm</span></pre>
</td>
</tr>
</tbody>
</table>
</figure>
<h3 id="备份和恢复">备份和恢复</h3>
<blockquote><p>通常一般都直接使用innobackupex，因为它能同时备份InnoDB和MyISAM引擎的表<br />
重点关注Slave_IO_Running和Slave_SQL_Runningd的状态是否为YES</p>
<figure class="highlight sql">
<table>
<tbody>
<tr>
<td class="code">
<pre><span class="line">#备份</span>
<span class="line">innobackupex <span class="comment">--socket=/usr/local/var/mysql2/mysql2.sock --user=root --password --defaults-file=/etc/mysqld_multi.cnf --parallel=4 --database=passport /tmp/backup</span></span>
<span class="line">#保持事务一致性</span>
<span class="line">innobackupex <span class="comment">--socket=/usr/local/var/mysql2/mysql2.sock --user=root --password --defaults-file=/etc/mysqld_multi.cnf --database=passport --apply-log /tmp/backup/2015-08-05_16-08-14</span></span>
<span class="line">#传输</span>
<span class="line">scp -r /tmp/<span class="operator"><span class="keyword">backup</span>/<span class="number">2015</span>-<span class="number">08</span>-<span class="number">05</span>_16-<span class="number">08</span>-<span class="number">14</span> <span class="number">10.10</span><span class="number">.16</span><span class="number">.24</span>:/tmp/<span class="keyword">backup</span>/ </span>
#恢复
innobackupex <span class="comment">--socket=/tmp/mysql.sock --user=root --password --defaults-file=/app/local/mysql/my.cnf --copy-back /tmp/backup/2015-08-05_16-08-14/</span>
#还原权限
chown -R mysql:mysql /app/<span class="keyword">data</span>/mysql/<span class="keyword">data</span>
service mysqld <span class="keyword">start</span>
/app/<span class="keyword">local</span>/mysql/scripts/mysql_install_db <span class="comment">--basedir=/app/local/mysql --datadir=/app/data/mysql/data --no-defaults --skip-name-resolve --user=mysql</span>


#主库授权同步帐号
<span class="keyword">SELECT</span> <span class="keyword">DISTINCT</span> <span class="keyword">CONCAT</span>(<span class="string">'User: '''</span>,<span class="keyword">user</span>,<span class="string">'''@'''</span>,host,<span class="string">''';'</span>) <span class="keyword">AS</span> <span class="keyword">query</span> <span class="keyword">FROM</span> mysql.<span class="keyword">user</span>;</span>
<span class="line"><span class="operator"><span class="keyword">GRANT</span> REPLICATION <span class="keyword">SLAVE</span> <span class="keyword">ON</span> *.* <span class="keyword">TO</span> <span class="string">'slave_passport'</span>@<span class="string">'10.10.16.24'</span> <span class="keyword">IDENTIFIED</span> <span class="keyword">BY</span> <span class="string">'slave_passport'</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">FLUSH</span> <span class="keyword">PRIVILEGES</span>;</span></span>

<span class="line">#从库开启同步</span>
<span class="line">cat /tmp/<span class="operator"><span class="keyword">backup</span>/<span class="number">2015</span>-<span class="number">08</span>-<span class="number">05</span>_16-<span class="number">08</span>-<span class="number">14</span>/xtrabackup_binlog_info </span>
mysql-<span class="keyword">bin</span><span class="number">.002599</span>    <span class="number">804497686</span>

<span class="keyword">CHANGE</span> <span class="keyword">MASTER</span> <span class="keyword">TO</span>
MASTER_HOST=<span class="string">'10.10.16.51'</span>,
MASTER_USER=<span class="string">'slave_passport'</span>,
MASTER_PASSWORD=<span class="string">'slave_passport'</span>,
MASTER_PORT=<span class="number">3307</span>,
MASTER_LOG_FILE=<span class="string">'mysql-bin.002599'</span>,
MASTER_LOG_POS=<span class="number">804497686</span>;</span>

<span class="line">#开启主从同步</span>
<span class="line"><span class="operator"><span class="keyword">start</span> <span class="keyword">slave</span>;</span></span>
<span class="line">#查看从库状态</span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">slave</span> <span class="keyword">status</span>\ G</span>
#从库的检查参数
Slave_IO_Running=Yes
Slave_SQL_Running=Yes

#主库的检查参数
<span class="keyword">show</span> <span class="keyword">master</span> <span class="keyword">status</span> \G

+<span class="comment">------------------+-----------+--------------+------------------+</span>
| File             | <span class="keyword">Position</span>  | Binlog_Do_DB | Binlog_Ignore_DB |
+<span class="comment">------------------+-----------+--------------+------------------+</span>
| mysql-<span class="keyword">bin</span><span class="number">.002600</span> | <span class="number">454769337</span> |              |                  |
+<span class="comment">------------------+-----------+--------------+------------------+</span>
<span class="number">1</span> <span class="keyword">row</span> <span class="keyword">in</span> <span class="keyword">set</span> (<span class="number">0.00</span> sec)


<span class="keyword">show</span> <span class="keyword">processlist</span>;</span>

<span class="line">Master has sent all binlog to slave; waiting for binlog to be updated</span></pre>
</td>
</tr>
</tbody>
</table>
</figure>
<h3 id="MySQL主从切换">MySQL主从切换</h3>
<blockquote><p>切换前断开主库访问连接观察进程状态，无写操作后再停止从库IO_THREAD进行切换</p></blockquote>
<figure class="highlight sql">
<table>
<tbody>
<tr>
<td class="code">
<pre><span class="line">#查看主库状态</span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">processlist</span>;</span></span>
<span class="line">Master has sent all binlog to slave; waiting for binlog to be updated</span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">master</span> <span class="keyword">status</span> \G</span>

#从库停止 IO_THREAD 线程
<span class="keyword">stop</span> <span class="keyword">slave</span> IO_THREAD;</span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">processlist</span>;</span></span>
<span class="line">Slave has read all relay log; waiting for the slave I/O thread to <span class="operator"><span class="keyword">update</span> it</span>
<span class="keyword">show</span> <span class="keyword">slave</span> <span class="keyword">status</span> \G

#从库切换为主库
<span class="keyword">stop</span> <span class="keyword">slave</span>;</span>
<span class="line"><span class="operator"><span class="keyword">reset</span> <span class="keyword">master</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">reset</span> <span class="keyword">slave</span> <span class="keyword">all</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">master</span> <span class="keyword">status</span> \G</span>

#激活帐户
<span class="keyword">SELECT</span> <span class="keyword">DISTINCT</span> <span class="keyword">CONCAT</span>(<span class="string">'User: '''</span>,<span class="keyword">user</span>,<span class="string">'''@'''</span>,host,<span class="string">''';'</span>) <span class="keyword">AS</span> <span class="keyword">query</span> <span class="keyword">FROM</span> mysql.<span class="keyword">user</span>;</span>
<span class="line"><span class="operator"><span class="keyword">GRANT</span> REPLICATION <span class="keyword">SLAVE</span> <span class="keyword">ON</span> *.* <span class="keyword">TO</span> <span class="string">'slave_passport'</span>@<span class="string">'10.10.16.51'</span> <span class="keyword">IDENTIFIED</span> <span class="keyword">BY</span> <span class="string">'slave_passport'</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">FLUSH</span> <span class="keyword">PRIVILEGES</span>;</span></span>

<span class="line">#切换原有主库为从库</span>
<span class="line"><span class="operator"><span class="keyword">reset</span> <span class="keyword">master</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">reset</span> <span class="keyword">slave</span> <span class="keyword">all</span>;</span></span>

<span class="line"><span class="operator"><span class="keyword">CHANGE</span> <span class="keyword">MASTER</span> <span class="keyword">TO</span></span>
MASTER_HOST=<span class="string">'10.10.16.24'</span>,
MASTER_USER=<span class="string">'slave_passport'</span>,
MASTER_PASSWORD=<span class="string">'slave_passport'</span>,
MASTER_PORT=<span class="number">3306</span>,
MASTER_LOG_FILE=<span class="string">'mysql-bin.000001'</span>,
MASTER_LOG_POS=<span class="number">804497686</span>;</span>

<span class="line">#检查主库</span>
<span class="line"><span class="operator"><span class="keyword">SHOW</span> <span class="keyword">PROCESSLIST</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">master</span> <span class="keyword">status</span> \G</span>

#启动从库
<span class="keyword">SHOW</span> <span class="keyword">PROCESSLIST</span>;</span>
<span class="line"><span class="operator"><span class="keyword">start</span> <span class="keyword">slave</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">show</span> <span class="keyword">slave</span> <span class="keyword">status</span> \G</span></span></pre>
</td>
</tr>
</tbody>
</table>
</figure>
<h3 id="常见问题">常见问题</h3>
<blockquote><p>Slave_SQL_Running:No</p></blockquote>
<pre><span class="line">#一般是事务回滚造成的</span>
<span class="line"><span class="operator"><span class="keyword">stop</span> <span class="keyword">slave</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">set</span> <span class="keyword">GLOBAL</span> SQL_SLAVE_SKIP_COUNTER=<span class="number">1</span>;</span></span>
<span class="line"><span class="operator"><span class="keyword">start</span> <span class="keyword">slave</span>;</span></span></pre>
</blockquote>
</blockquote>
</blockquote>
<p><a rel="nofollow" href="https://www.fuwuqiok.com/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/">XtraBackup不停机不锁表搭建MySQL主从同步教程</a>，首发于<a rel="nofollow" href="https://www.fuwuqiok.com">服务器安全维护工作室</a>。</p>
]]></content:encoded>
			<wfw:commentRss>https://www.fuwuqiok.com/xtrabackup%e4%b8%8d%e5%81%9c%e6%9c%ba%e4%b8%8d%e9%94%81%e8%a1%a8%e6%90%ad%e5%bb%bamysql%e4%b8%bb%e4%bb%8e%e5%90%8c%e6%ad%a5%e6%95%99%e7%a8%8b/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
