Articles of mysql

我怎样才能在三个或更多地理位置独立的服务器之间集中MySQL数据?

为了解释这个问题的背景: 我们有一个在Linux服务器上运行的本地PHP应用程序(用于运行在线语言学习课程),并在本地主机上使用MySQL来保存用户数据(例如,testing结果,提交工作的标记,花在不同页面上的时间课程等)。 由于我们有来自不同地理位置的学生,因此我们目前在这些地点(西class牙,英国和香港)附近托pipe了3台虚拟服务器,并将用户添加到离他们最近的服务器上(他们通过不同的URL访问,例如europe.domain.com ,uk.domain.com和asia.domain.com)。 这个工作,但是是一个pipe理的噩梦,因为我们必须记住一个特定的用户在哪个服务器上,用户只能连接到一个服务器。 我们希望以某种方式集中化信息,以便所有用户都可以在任何服务器上看到,并且用户可以连接到3台服务器中的任何一台。 问题是,我们应该用什么方法来实现这一点。 这肯定是一个很多人遇到的问题,但是我还没有find任何结论性的search结果。 我看到的最接近的解决scheme是: 像master-master复制,但我已经阅读了这么多的post,这表明这不是一个好主意,因为像auto_increment字段可以打破。 循环复制,这听起来很完美,但引用O'Reilly的高性能MySQL,“一般来说,环是脆弱和最好的避免” 我们不反对在应用程序中重写代码,以使其能够与任何需要的解决scheme一起工作,但我不确定是否使用复制是正确的。 谢谢, 安迪 PS我应该补充一点,我们尝试写入中央数据库,然后使用本地数据库读取,但不同服务器之间写入的响应时间相当糟糕,写入数据立即可用于读取也很重要,所以如果复制太慢,这可能会导致过期的数据被返回。 编辑:我一直在考虑编写我自己的基本复制脚本,这个脚本涉及到每个用户都有一个服务器ID来说明他的“主服务器”,比如亚洲的用户会被标记为香港服务器自己的服务器 然后复制脚本(这将是一个PHP脚本设置为合理频繁地运行,例如每15分钟左右),将独立运行在系统中的每个服务器上。 他们将通过数据库并将有关用户的任何信息与“主服务器”一起分配给运行脚本的服务器,以便将其发送到系统中的所有其他数据库。 他们还需要吸收已经添加到系统上的其他数据库的新信息,其中“主服务器”标志是运行脚本的服务器。 我需要弄清楚细节并构build处理冲突的逻辑,但是我认为这是可能的,但是我想确保没有一个正确的解决scheme已经在那里,因为它似乎是必须的这是很多人已经遇到的问题。

mysql不使用多个cpus

我们的MySQL服务器最近一直在使用大量的CPU(几次达到100%,并停留了一段时间),我注意到它的CPU负载都在一个CPU的一个核心上。 我希望能够在我的服务器上传播到全部4个。 我一直在调整MySQL的设置,以使用更多的内存和更less的CPU,但它偶尔会达到非常高的CPU使用率。 似乎所有关于这个主题都是指thread_concurrency(我读过的只是solaris设置)。 我能在Linux上做什么? 谢谢。

Ubuntu MySQL GUIlogin证书/密钥

我将每天使用Mysql Administrator和Mysql Query Browser GUI工具连接到Ubuntu云服务器上的Mysql Administrator ,并且我感觉响应速度非常慢。 我知道可以用ssh连接到terminal的下面命令,然后使用Mysql GUI工具。 ssh -L 3307:127.0.0.1:3306 mysql-server-ip 但是这对于每个人来说都是不容易的,在terminal上运行上面的命令,然后使用gui工具。 上面的ssh命令也很好,我觉得我正在处理本地数据库,但是如果它有一个在mysql gui工具本身中指定ssh命令的选项,对每个人来说都是最好的,也是最简单的。 此外,我想删除基于IP的限制,因为我使用iptables规则只允许mysql和其他端口的云服务器上的特定IP。 有什么最好的和简单的方式连接到MySQL像使用证书一起使用MySQL GUI工具? 最后,我期待的是,与MySQL的GUI工具(pipe理员和查询浏览器): 我想用一些证书/密钥轻松连接到MySQL 我想删除基于IP的限制,以便谁拥有密钥/证书可以连接到MySQL 任何人有任何想法? 谢谢!

系统升级引入了一个不寻常的mysql权限错误

在运行mysql的盒子升级之后,备份脚本正在为Innodb表的数据库返回一个错误。 一个运行Debian 5(Lenny)的系统已经升级到了Debian 6(Squeeze),系统从Debian仓库运行股票mysql-server软件包。 Debian 5 = Mysql 5.0.51a Debian 6 = Mysql 5.1.49 备份是通过备份多个mysql服务器的脚本来执行的,并分别备份每个单独的数据库。 这是在对Innodb表数据库运行时返回的命令和错误。 $ mysqldump –defaults-extra-file=creds.cnf –lock-tables –flush-logs –force db_innodb > /dev/null mysqldump: Got error: 1045: Access denied for user 'backup'@'%' (using password: YES) when using LOCK TABLE echo $? 2 在同一台服务器上使用相同的帐户对同一个Myisam表的数据库运行相同的命令时,没有错误。 $mysqldump –defaults-extra-file=creds.cnf –lock-tables –flush-logs –force db_myisam > /dev/null echo $? […]

在Linux上使用Apache / Varnish / MySQL优化服务器体系结构

我是小型初创公司的服务器pipe理员(这意味着我绝不是一个经验丰富的专家),最近我帮助将站点从一台Windows机器迁移到Rackspace上的一组机器上云。 目前该网站的基准testing约为600个请求/秒,但考虑到我们分配给它的资源量,我觉得它可能要高得多。 现在我们在8台Web服务器前使用Rackspace云负载均衡器(Apache Zeus)。 每个Web服务器都在一个512MB云实例上运行Linux,内容由具有Apache 2后端的Varnish服务。 Web应用程序本身就是PHP。 Apache运行在mpm-worker中,php运行在fcgi中。 PHP APC也被启用。 至于数据库后端,我有两个4GB的服务器实例在Master-Master复制设置中为MySQL服务,其中一半的Web服务器指向每个服务器。 该应用程序是相当密集的数据库,因此有这么多的资源专用于数据库。 性能通常很好,但是我们有一些负载尖峰,现有的基础设施无法处理,所以我dynamic地增加了节点的大小。 这个结果很好,但是我觉得在特定的负载条件下,我不得不在基础设施上投入更多的资源,比我预期的要快得多。 在我的研究中,似乎我们正在使用非常罕见的设置,因为有很多单独的清漆实例,我可能需要探索caching层的选项。 这里画出了当前体系结构的概述(谷歌文档链接) rackspace云的定价模式非常线性,这意味着一个1024mb的服务器实例是一个512mb实例成本的两倍。 因此,我期待在相同数量的资源(成本)下工作时最大化我的performance。 我最初的想法是删除rackspace负载平衡器,而不是在apache后端前面使用一个单独的varnish实例,也许使得apache后端是4x 1gb的实例,而不是8x 512mb的实例。 负载平衡器的成本非常低廉,所以为了用另一台专用服务器来替代它,性能增益将会很大。 我也玩弄了HAProxy和Nginx的想法,但是我不想盲目地在一个生产网站上做实验。 我的目标是能够在大致相同的硬件configuration下接近2000 req / s。 编辑:我有mod_pagespeed工作了一阵子,使我了约100 req / s,但我似乎有很多关于如何与清漆交互的问题。 编辑: Varnish VCL ,Disk是Rackspace Cloud的默认(非SAN,猜测SATA),数据库目前大约是1.5GB。 在正常情况下不能交换到磁盘。 每个Apache的进程大约是20MB。 php-cgi进程倾向于咀嚼更多的资源。

针对MySQL的HA设置/主要是MyISAM表

我目前正在使用主从复制,在应用程序级别将读取与写入分开。 当前实现的唯一一种故障转移是主站故障的应用程序级检测,使从站成为新的主站,因此应用程序可以不间断运行。 正如人们所能猜到的那样,切换回来,进行同步,整理等工作是很多的工作。 我search了很多,并阅读了几十篇文章,但是我没有遇到HA MySQL的解决scheme,如果你主要是MyISAM Tables,Mysql Cluster,Heartbeat / DRBD,Schooner,这些对于InnoDB-only的设置来说都是好的,但是不适合MyISAM。 我希望能够提供一些build议或者有关HA设置的实际经验。 它不需要是开源的(免费阅读),只需要工作。

MySQL在mysqldump上丢失连接错误

我有一个1TB的MySQL数据库,我想转储和重新加载。 大部分数据都在一张表中。 很多数据已经被删除,所以我很确定如果我把它转储到mysql,重build数据库,然后重新加载它的总大小将会更小。 我用这个命令来转储数据: mysqldump -uroot -pXXX mydb | gzip -c > data.sql.gz 我得到这个错误 mysqldump: Error 2013: Lost connection to MySQL server during query when dumping table `MY_TABLE` at row: 596089342 我已经尝试了许多变化,包括增加数据包大小,做单个翻译,并通过TCP / IP而不是本地套接字。 mysqldump -uroot -pXXX -h 127.0.0.1 –max-allowed-packet=1024M –single-transaction mydb | gzip -c > data.sql.gz 最后,我甚至运行了命令去/ dev / null,以确保它不是gzip。 所有的排列都会产生相同的错误。 mysqldump -uroot -pXXX […]

删除MySQL ibdata1而不转储和恢复现有的正确数据库

我的MySQL服务器包含两个100 + GB的大数据库。 一个是用innodb_file_per_table创build的,一个不是。 那个没有的,已经被倾倒了,准备好被重新装上。 但是,ibdata1文件仍然很大,我没有足够的可用空间。 在这种情况下,正常的build议是转储并删除每个数据库,停止MySQL,然后删除ibdata1和事务日志,然后重新加载数据库。 我的具体问题是:我可以保留单独使用innodb_file_per_table创build的数据库吗? 或者当我删除ibdata1时,它们会被销毁,尽pipe它们的所有文件是分开的? 我不能让这个数据库离线转储和重新加载它。 而且,因为它已经正确地用每个表格分开的文件制作,所以它觉得很没用。

如何通过Aptitude进行安装时非交互式地指定MySQL根密码?

aptitude install mysql-server时抛出一个提示,要求我设置root密码。 我想通过在初始命令中指定密码来避免这种情况。 我该怎么做呢?

DRBD在我的节点之间不同步

一些版本信息: Operating system is Ubuntu 11.10, on EC2, kernel is 3.0.0-16-virtual and the application info is: Version: 8.3.11 (api:88) GIT-hash: 0de839cee13a4160eed6037c4bddd066645e23c5 build by buildd@allspice, 2011-07-05 19:51:07 在dmesg(见下面)中获得一些奇怪的错误,没有复制发生。 我已经做了我的第一个节点的主要和显示: drbd driver loaded OK; device status: version: 8.3.11 (api:88/proto:86-96) srcversion: DA5A13F16DE6553FC7CE9B2 m:res cs ro ds p mounted fstype 0:r0 StandAlone Primary/Unknown UpToDate/DUnknown r—-s ext3 我的辅助节点正在显示: drbd driver […]