我需要定期更改 mysql 5.1 中的表,主要是添加列。使用 alter table 命令非常简单。但是我的表现在有多达 4000 万行,而且它们增长得很快……所以那些 alter table 命令需要几个小时。几个月后,我猜他们会花几天时间。
由于我使用的是 amazon RDS,因此我无法使用从服务器然后升级为主服务器。所以我的问题是是否有办法以最少的停机时间做到这一点?如果用户仍然可以使用数据库,我不介意花费数小时甚至数天的操作......他们至少可以在添加列时阅读吗?如果我的应用尝试写入会发生什么?插入还是更新?如果它立即失败,那实际上并没有那么糟糕,如果它只是挂起并导致数据库服务器出现问题,那就是一个大问题..
这一定是一个相当普遍的缩放问题,每个人都需要添加列.. 通常对生产数据库做什么?从 -> 主迁移?
更新- 我忘了提到我正在使用 innodb 存储引擎
基本上,我们有一个大型 MySQL 数据库,我们希望复制到从站(主从设置)。你们有关于如何在数据库停机时间最短的情况下做到这一点的分步指南吗?备份数据库并将备份传输到从服务器(甚至通过专用网络)大约需要 40 分钟。相当长的停机时间。
我一直在忠实地按照以下说明设置 MySQL 主复制(在 Debian 6.0.1 上):http : //www.neocodesoftware.com/replication/
我已经到了:
mysql > show master status;
Run Code Online (Sandbox Code Playgroud)
但不幸的是,这会产生以下结果,而不是任何有用的输出:
Empty set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
错误日志/var/log/mysql.err只是一个空文件,所以没有给我任何线索。
有任何想法吗?
这是我/etc/mysql/my.cnf在一台服务器上放置的内容(针对另一台服务器进行了适当修改):
server-id = 1
replicate-same-server-id = 0
auto-increment-increment = 2
auto-increment-offset = 1
master-host = 10.0.0.3
master-user = <myusername>
master-password = <mypass>
master-connect-retry = 60
replicate-do-db = fruit
log-bin = /var/log/mysql-replication.log
binlog-do-db = fruit
Run Code Online (Sandbox Code Playgroud)
我已经设置了用户,可以使用上面的用户名/密码/IP 地址从服务器 A 上的 MySQL 连接到服务器 B 上的数据库。
更新:
绑定版本:
[root@10.224.45.130] $ named -v
BIND 9.3.6-P1-RedHat-9.3.6-16.P1.el5
Run Code Online (Sandbox Code Playgroud)
操作系统:
CentOS release 5.6 (Final)
Run Code Online (Sandbox Code Playgroud)
运行后[root@10.224.45.131] $ dig @10.224.45.130 example.com. axfr:
奴隶:
; <<>> DiG 9.3.6-P1-RedHat-9.3.6-16.P1.el5 <<>> @10.224.45.130 example.com. axfr
; (1 server found)
;; global options: printcmd
; Transfer failed.
Run Code Online (Sandbox Code Playgroud)
掌握:
28-Aug-2011 12:29:01.384 client 10.224.45.131#60553: query: example.com IN AXFR -
28-Aug-2011 12:29:01.384 client 10.224.45.131#60553: zone transfer 'example.com/AXFR/IN' denied
Run Code Online (Sandbox Code Playgroud)
与之前相同的错误消息。
更新 2:
[root@10.224.45.130 ~] # iptables -L -n -v
Chain INPUT (policy DROP 30235 packets, 1747K bytes)
pkts bytes target …Run Code Online (Sandbox Code Playgroud) 这似乎是一个非常基本的问题,但是,主 DNS 服务器如何知道其从属服务器?
我的意思是,它是否解析区域文件并确定将 NOTIFY 消息发送到哪里?
如果是这种情况,那么隐藏主设置中的 NOTIFY 机制是否被破坏了,不是吗?
我正在编写代码来提取 MySQL 复制环境中所有从服务器的 IP 地址和用户名。
有谁知道我可以在控制台中运行并在不查看my.cnf文件的情况下检索这些信息的任何函数、变量或其他东西?
我的 MySQL 从服务器在Slave_SQL_Running_State: System lock. 我可以看到系统当前是 I/O 写绑定,并且它正在处理日志,尽管速度很慢。Show processlist处于此状态时,除了“等待主发送事件”和“系统锁定”外,不显示任何其他内容。
我的所有表(系统表除外)都是 InnoDB,并且禁用了外部锁定。奴隶在这种状态下在做什么?
以下是一些被要求提供的信息:
首先,这是 Amazon EC2 实例上的 MySQL 5.6 社区,所有存储都在 EBS 上。
mysql> show processlist;
+----+-------------+-----------+---------------+---------+--------+----------------------------------+------------------+
| Id | User | Host | db | Command | Time | State | Info |
+----+-------------+-----------+---------------+---------+--------+----------------------------------+------------------+
| 1 | system user | | NULL | Connect | 26115 | Waiting for master to send event | NULL |
| 2 | system user | | NULL | Connect | …Run Code Online (Sandbox Code Playgroud) 我必须为 Magento 进行设置。我的限制主要是易于设置和容错/故障转移。此外,成本也是一个问题。我有三个相同的物理服务器来完成工作。每个服务器节点在软件 RAID 1 配置中都有一个 i7 四核、16GB RAM 和 2x3TB HD。每个节点都运行 Ubuntu 12.04。马上。我有一个额外的 IP 地址,可以路由到这些节点中的任何一个。
Magento 商店有最大。1000个产品,其中50%是捆绑产品。我估计最大。10 个用户同时处于活动状态。这使我得出结论,性能不是这里的重中之重。
一个节点 (lb) 将 nginx 作为负载均衡器运行。附加 IP 与域名一起使用并默认路由到此节点。Nginx 将负载平均分配给其他两个节点(shop1、shop2)。Shop1 和 shop2 配置相同:每个服务器运行 Apache2 和 MySQL。Mysqls 配置了主/从复制。
我的故障转移策略:
这是一个明智的策略吗?有没有人用 Magento 做过类似的设置?
另一种方法是使用 drbd 将 MySQL 数据文件存储在 shop1 和 shop2 上。我知道在这种情况下,只有一个节点/MySQL 实例可以处于活动状态,另一个用作热备用。因此,如果 shop1 失败,我会在 shop2 …
我有两台运行 BIND9 的 DNS 服务器,一台主机和一台从机。当主服务器上的区域文件更新时,我希望从服务器立即开始为更改的记录提供服务,但 BIND 给了我一些建议。
DNS 区域传输已经在 master 和 slave 之间正常工作。我可以登录从服务器并运行dig @dnsmaster myzone. AXFR,它会打印出该区域的全部内容。为了使其工作,DNS 主机配置了notify yes和also-notify { dnsslave }。同样,从站配置为allow-transfer { dnsmaster }.
当 dnsmaster 更新时,我运行rndc reload并告诉我正在发送通知。通过检查/var/named/slavedata/. 它们包含最新的数据,与主人知道的相匹配。
现在是奇怪的部分。
从服务器将继续提供旧的、陈旧的 DNS 记录,完全忽略在收到主服务器通知后磁盘上有新数据可用的事实。我使用dig的检查与此命令的结果:dig @slaveserver record.zone.tld。
我认为 BIND 可能会保留其权威区域的内存缓存,因此我将max-cache-size和设置max-cache-ttl为 0,但这没有任何效果。
我尝试了其他方法来刷新这个所谓的缓存,通过在从服务器上运行类似rndc flush和 的命令rndc reload,但它仍然返回旧的陈旧记录。
最后发现MINTTLonzone被设置为86400(24小时),所以我暂时将其MINTTL改为15秒,并重启了从服务器。无效 - 从站只会在服务重新启动后提供更新的 DNS 结果。
这里发生了什么?收到区域更新通知时 BIND9 的预期行为是什么?它总是尊重TTL …
首先,我不是 linux 专家,我一直在学习教程并在 google 的帮助下工作,直到现在这都很好,但目前我遇到了一个问题。
我使用的是 CentOS 6.5 和 DRBD 版本 8.4.4。
我有两个运行起搏器的节点,到目前为止一切正常,我设置了 DRBD,我可以手动将一个节点设置为主节点并挂载 DRBD 资源,这样也可以正常工作。
现在我创建了一个起搏器资源来控制 DRBD,但它无法将两个节点中的任何一个提升为 master,这也阻止了它被挂载。
pcs 状态如下所示:
Cluster name: hydroC
Last updated: Wed Jun 25 14:19:49 2014
Last change: Wed Jun 25 14:02:25 2014 via crm_resource on hynode1
Stack: cman
Current DC: hynode1 - partition with quorum
Version: 1.1.10-14.el6_5.3-368c726
2 Nodes configured
4 Resources configured
Online: [ hynode1 hynode2 ]
Full list of resources:
ClusterIP (ocf::heartbeat:IPaddr2): Started hynode1
Master/Slave Set: MSdrbdDATA [drbdDATA]
Slaves: [ hynode1 hynode2 …Run Code Online (Sandbox Code Playgroud)