如何在mysql中备份大型数据库?复制数据库的最佳方法是什么?
我正在寻找的是在很短的时间限制内备份具有大量数据的大型数据库,然后在很短的限制时间内恢复它?
我正在配置 MySQL 复制并打算使用基于行的复制,但我也在阅读基于混合的复制。
这是基于语句的默认设置,然后在某些情况下(http://dev.mysql.com/doc/refman/5.1/en/binary-log-mixed.html)MySQL将切换到基于行。
该列表何时切换到基于行的内容非常多。
我的问题是:
有人混合使用吗?如果是,你为什么选择这个而不是只使用一个?
提前致谢
我有一个 mysql 只读复制从属设置,目前正在为大约 10 个数据库工作,我需要添加 3 个新数据库。我找不到有关如何添加其他信息的任何信息。有没有人对如何做到这一点有一些指导?
谢谢。
我正在寻找平衡 MySQL 基础架构负载的方法,但似乎找不到适合我的答案... :)
所以,我有一个又大又胖的服务器,可以处理所有事情。许多数据库,许多读取,许多写入等。它处理得很好,但它是单点故障。
我们已经设置了几个 slaves 来将读取重定向到它们,但面临两个问题:重建所有程序以拆分读取和写入需要花费大量精力;有时奴隶会落后,这会导致应用程序中出现非常有趣的工件。
从站落后的问题:因为许多数据库是混合的 - 在数据挖掘方面完成了大量 10-20 分钟的查询,以及不需要时间的原子查询。但是 Slave 一次只运行一个查询,因此所有原子查询都必须等到重查询完成。
为了解决这两个问题,我正在考虑使用代理之类的东西,它会考虑:
仍然存在但我想考虑的一个问题是故障转移。如果 master 失败了——如果 slave 承担 master 的责任就好了,当 master 备份时——它将成为奴隶。
欢迎任何指向 RTFM 或有关此主题的案例研究的指针 =)
编辑:谷歌搜索了更多,除了 Tungsten 企业 - 还找到了 dbShards 和 Schooner。在深入研究的同时 - 有没有人有使用这些解决方案的经验?任何反馈?
有没有办法在近乎实时的 MySQL 更改中复制到相等的 PostgreSQL 数据库?
一整天都在“奴役”这个问题。
我有一个有效的主/从设置,但是当我尝试复制到从属上的不同数据库名称时,它失败了。这是 my.cnf 的样子:
server-id=101
report-host=Slave01
replicate_do_db='DB1'
replicate-rewrite-db=DB1->DB2
replicate-ignore-table=DB2.SOME_TABLE_NAME
Run Code Online (Sandbox Code Playgroud)
如果我取出replicate-rewrite-db 行,它可以完美运行并将DB1 数据库从主数据库复制到从数据库。我在从站上使用的主日志位置是在主站上的 CREATE DATABASE DB1 调用之后。在该日志位置之后,将创建表并在主服务器上导入数据。在创建 DB2 数据库之前,我不会配置和启动从属设备。
有任何想法吗?
更新:在mysql错误日志中看到了这个:
120531 15:48:19 [Note] Slave I/O thread: connected to master 'slave_user@master_server:3306', replication started in log 'mysql-bin.000001' at position 107
120531 15:48:20 [ERROR] Slave: Error 'Unknown database 'DB1'' on query. Default database: 'DB1'. Query: 'CREATE TABLE `ANOTHER_TABLE` (
Run Code Online (Sandbox Code Playgroud) 我在另一台主机上有一个带有从属复制的 MySQL 服务器。今天偶然发现了slave主机的磁盘使用率很高,并调查了占用所有空间的内容。事实证明,这个空间被奴隶中继日志占用。
我试图关闭expire_logs_days变量并重新启动 MySQL 守护程序,但报告的磁盘空间保持不变。我真的找不到任何FLUSH LOGS可以清除旧日志的东西。我试过没有结果。
有什么办法可以减少中继日志占用的磁盘空间吗?
我正在尝试启用二进制日志记录,以便我可以在两台服务器之间设置主从复制。我正在使用具有大量数据的现有服务器,并且正在尝试使用以下命令转储数据:
mysqldump -u root -p --all-databases --master-data > masterdump.sql
Run Code Online (Sandbox Code Playgroud)
但我收到错误:mysqldump: Error: Binlogging on server not active。
我已经遵循了有关如何启用二进制日志记录的各种教程,但没有任何效果。我已确保已将以下参数添加到 my.cnf:
server-id = 1
log_bin = /var/log/mysql/mysql-bin.log
sync_binlog = 1
Run Code Online (Sandbox Code Playgroud)
当我重新启动 MySQL 时,它需要一段时间(我认为这是由于数据库的巨大大小),大约 60 秒,但最终会启动。但是,当我检查时/var/log/mysql/error.log,发现以下错误(重复数百次):
InnoDB: Unable to lock ./ibdata1, error: 11
InnoDB: Check that you do not already have another mysqld process
Run Code Online (Sandbox Code Playgroud)
所以我通过运行来寻找所有的 mysqld 进程pstree,我发现了以下内容:
root@my_server:~# pstree
init---some stuff
|--
|--mysqld---10*[{mysqld}]
|--
|--sudo---mysqld---23*[{mysqld}]
Run Code Online (Sandbox Code Playgroud)
这就是我被困的地方。我不知道mysqldANDsudo mysqld都运行是否正常。服务器由ServerPilot维护,[我认为] 为我安装了 MySQL。
是否有任何证据表明二进制日志无法启用的任何原因?
我在 2 个 Debian 服务器上设置了 master-master 复制,它们复制了所有内容,包括 mysql 数据库本身(以便新用户等也复制)。这通常非常有效,除了大多数(如果不是全部)对 mysql 的 apt 升级都涉及对 mysql 数据库架构的一些更改,这会导致复制错误停止复制。最终,我总是需要通过跳过每一边的错误语句来手动修复。这总是很耗时,而且我担心我可能会在手动操作时出错(跳过太多语句、错误输入 CHANGE MASTER 详细信息等)。
我可以做些什么来确保将来对 MySQL 的 apt-get 更新能够顺利处理而不会导致复制问题?肯定有一个完善的最佳实践吗?
我正计划复制 Web 服务器以实现高可用性目的。该服务器在 Hyper-V 中作为 Ubuntu 15.04 虚拟机运行,并安装了 MariaDB 10.0、Apache 2.4 和 PHP-FPM 5.6。
第二个虚拟机将作为该虚拟机的直接副本启动,但位于美国。第一个虚拟机位于欧洲。(延迟约为 80-120 毫秒)
我想让服务器保持同步,以便它们都可以向我的客户端提供相同的内容,并且客户端将使用最近的服务器(为此我将使用 Route 53)
服务器之间的数据交换是安全的,这很重要,以保护数据库中的联系方式和其他信息,并防止更改 /var/www 目录中的文件。
我已经考虑为此使用以下选项:
SSL(TLS)
我已经考虑使用 SSH 进行数据库和文件复制。但是我不确定文件复制部分使用哪个应用程序。
SSL 可用于数据库复制,但它需要生成需要时不时更换的证书,这可能会花钱。
我的最后一个选择是使用 openvpn,但我不确定是否可以将其设置为附加网络,而不是通过它路由我的所有流量。这个方法好像也需要生成证书文件。。
mysql ubuntu mysql-replication replication high-availability
mysql ×9
replication ×3
apt ×1
backup ×1
binary-log ×1
debian ×1
postgresql ×1
ubuntu ×1
ubuntu-14.04 ×1