我在提供MySQL服务的服务器上有一个相当简单的iptables防火墙,但是iptables似乎给了我非常不一致的结果。 脚本的默认策略如下所示: iptables -P INPUT DROP 然后我可以使用以下规则公开MySQL: iptables -A INPUT -p tcp –dport 3306 -j ACCEPT 有了这个规则,我可以连接到MySQL从任何源IP到服务器上的任何目标IP没有问题。 但是,当我尝试通过用以下代替上面的行来限制对三个IP的访问时,我遇到了麻烦(xxx = masked octect): iptables -A INPUT -p tcp –dport 3306 -m state –state NEW -s 208.XXX.XXX.184 -j ACCEPT iptables -A INPUT -p tcp –dport 3306 -m state –state NEW -s 208.XXX.XXX.196 -j ACCEPT iptables -A INPUT -p […]
出于某种原因,当我运行mysqltuner时,MySQL服务器中的所有InnoDB表都被列为碎片。 我只在几个小时前(在OSX Lion上)安装了服务器,并且从batch file中导入了一堆新的数据。 我试图将一个数据库中的所有表格转换为MYISAM,并且确实足够的碎片表的数量下降了。 奇怪的是,只要我把这些表格转换回InnoDB,零散的表格数量又一次反弹回来。 这与我迄今为止的研究相反,这表明运行ALTER TABLE table_name ENGINE=INNODB; 应该修复碎片。 谷歌search后,我跑了一下: SELECT table_schema, table_name, data_free/1024/1024 AS data_free_MB FROM information_schema.tables WHERE engine LIKE 'InnoDB' AND data_free > 0 哪个应该列出所有碎片表(它确实返回相同数量的结果作为碎片表计数mysqltuner输出)。 data_free_MB列中的每个条目都具有完全相同的编号(当前为7.00000000)。 这实际上是一个真正的问题或mysqltuner做错了什么? 如果是问题,我该如何解决? 编辑 我变得越来越可疑,我是一个白痴,7MB碎片是整个文件,而不是每个表。 任何人都可以证实,如果是这样的话?
如果您在mysql INNODB表中禁用了键(挂起索引),那么这个设置最后会持续多久? 对于像这样的查询: ALTER TABLE users DISABLE KEYS; 在脚本的末尾重新启用密钥? 或者他们持续到你明确地转动索引?
MySQL主版本:5.5.16-1 MySQL从版本:5.5.18-1 主人的快照是由以下创build的: mysql> FLUSH TABLES WITH READ LOCK; shell> mysqldump –all-databases –master-data > dbname_`date +%F`.sql 这个转储文件被导入到从站(以–skip-slave-start选项–skip-slave-start ),没有错误: shell> pv dbname_`date +%F`.sql | mysql -u root -p 但是在执行mysql> start slave;时候出现了以下错误mysql> start slave; : Last_SQL_Errno: 1062 Last_SQL_Error: Error 'Duplicate entry '115846' for key 'PRIMARY'' on query. Default database: 'db'. Query: 'INSERT INTO request_posted (id, user_id, channel, […]
我有一台运行Ubuntu 8.10的Xen虚拟专用服务器(VPS),拥有128M内存。 我发现了几个“如何通过谷歌优化Apache和MySQL的低内存VPS”页面,但他们提供了矛盾的信息。 所以我问服务器故障:如何优化Apache和MySQL的低内存VPSconfiguration? 有几个人build议使用nginx而不是Apache。 我会研究这一点,但是如果可能的话,我宁愿坚持使用Apache,只是为了避免必须学习configuration应用程序堆栈在一个陌生的(对我)Web服务器的顶部。
在生产MySQL环境中,每四分钟将以下错误消息写入/var/log/mysql/error.log : 110723 18:36:02 InnoDB: ERROR: the age of the last checkpoint is 9433856, InnoDB: which exceeds the log group capacity 9433498. InnoDB: If you are using big BLOB or TEXT rows, you must set the InnoDB: combined size of log files at least 10 times bigger than the InnoDB: largest such row. 我不知道如何parsing错误信息。 更具体地说,我不明白检查点的年龄是如何与“日志组容量”相关的,以及如何与具有大BLOB […]
许多应用程序允许我使用用户名,密码主机和端口连接到Mysql。 有些允许我configuration一个套接字而不是host:port 。 有一个明显的好处吗? 我可以想象一个套接字只在MySQL在同一台机器上时才起作用。 是这样吗? 如果是这样,是否有利用这个套接字,而不是连接到localhost:3306 ? 我对networking和套接字的来龙去脉并不太熟悉,所以也许我完全错过了一些重要的信息,而我的问题却很愚蠢。 如果是这样,你能解释我失踪了吗?
我现在正在为我们的大部分数据库运行MySQL,并希望在需要更多的回合之前下船。 我的理解是,从MySQL-> MariaDB的过渡应该是微不足道的,但是换个方式并不那么容易。 有没有人做过这个跳跃呢? 编辑:奖金点,如果你有Debian / Ubuntu做这个轶事的信息。
我希望有一个SQL脚本运行,每当mysql启动,但我不能得到它在Ubuntu 11.10的工作。 我在mysqlconfiguration文件中添加了一个“ init-file ”选项: > sudo emacs -nw /etc/mysql/my.cnf … [mysqld] init-file=/etc/mysql/mysqlinit.sql … 但是,当我重新启动MySQL,它会失败,并出现“ 文件未find ”的错误: > tail /var/log/mysql/error.log 111111 7:41:06 [ERROR] /usr/sbin/mysqld: File '/etc/mysql/mysqlinit.sql' not found (Errcode: 13) 111111 7:41:06 [ERROR] Aborting 但是这个文件当然存在并且是可读的: > ls -l /etc/mysql/mysqlinit.sql -rwxr-xr-x 1 mysql mysql 30 2011-11-09 05:06 /etc/mysql/mysqlinit.sql 任何想法如何解决这个问题? 这是一个Ubuntu怪异还是我做了一些愚蠢的事情? 信息: 我正在运行Ubuntu 11.10和MySQL 5.1。 > mysqld […]
我有一张大约10亿行的桌子,其中98%的阅读密集。 我试着调整数据库,使用不同的存储引擎(MyISAM和InnoDB) 然后跑了几次testing来查看性能 在where子句中,我有一个主键ID,看起来,由于MyISAM Key Cache存储将所有索引加载到缓冲区中,使用MyISAM似乎非常快,比InnoDB快大约2倍 但对于InnoDB,它似乎慢了! InnoDB是否不使用任何缓冲区来预加载索引?