通过网络备份 MySQL 数据库

cal*_*inf 4 mysql backup database

Server #1 是在 Debian 上运行的 MySQL 数据库服务器,其中包含许多表和一个超过 100GB 的特定表。

Server #2 用作 MySQL 从属进行复制,但由于出现问题,现在需要重置它并重新初始化复制。

目前,服务器#1 的硬盘驱动器上没有足够的空间来执行完整的数据库转储(即小于 100GB 的可用空间)。除了升级需要停机的硬件之外,让数据库从服务器#1 转储到服务器#2 完好无损、没有损坏并且不会在此过程中填满服务器#1 上的硬盘驱动器的最佳方法是什么?

Sek*_*nre 6

快速而肮脏的方式(从服务器 #1 开始):

mysqldump -u root -p bigdb | bzip2 -c | ssh -T user@server2 "cat > backup.sql.bz2"
Run Code Online (Sandbox Code Playgroud)


Dav*_*ney 5

您可以在没有中间文件的情况下执行此操作,并在此过程中重置复制指针,因此您不会错过任何更新(并且必须再次重新同步)

  1. 停止复制从属

    slave> mysql 'slave stop;'

  2. 使用--master-data=1标志将 master 转储到 slave

    主> mysqldump -e --master-data=1 --single-transaction $DATABASE | ssh -C user@slave 'mysql $DATABASE'

  3. 在从服务器上启动复制

    从> mysql '从启动'

--master-data=1导致 mysqldump 发出CHANGE MASTER TO ...转储顶部的设置,以将复制二进制日志和偏移量设置为进行转储时主二进制日志中的确切点

-e 使用扩展的输出格式,基本上每个插入语句有多组值,这在线路上和应用于从站时都更有效。

--single-transation告诉 mysql 在整个转储中打开一个事务,而不是使用LOCK TABLES.