我在x64 Windows Server上运行MySQL 5.5并且不断获得自动增量ID错误,这是MySQL中的一个已知错误.我想尝试Percona Server或MariaDB,因为他们有更高的基准,但我找不到替代MySql 5.5.MariaDB 5.2可以用来取代MySQL 5.5,还是有一个在Windows上运行的Percona Server版本?还有其他人在Windows上使用其中任何一个吗?
在命令行中,这将成功更新table1:
pt-table-sync --execute h=host1,D=db1,t=table1 h=host2,D=db2
Run Code Online (Sandbox Code Playgroud)
但是,如果我想更新多个表,我不知道如何编写它.这只会更新table1并忽略其他表:
pt-table-sync --execute h=host1,D=db1,t=table1,table2,table3 h=host2,D=db2
Run Code Online (Sandbox Code Playgroud)
这给了我一个错误:
pt-table-sync --execute h=host1,D=db1 --tables table1,table2,table3 h=host2,D=db2
Run Code Online (Sandbox Code Playgroud)
任何人都有一个如何列出'-tables'的示例...以便它成功更新列表中的所有表?
我们的数据库中UPDATE性能偶尔会出现大幅放缓.
例如,表FooTable我们有大约40列varchar PK,另外还有10个索引.以下查询花了44秒,而在其他时候它几乎立即运行.在减速期间,服务器上的负载平均值非常低(5分钟平均值为1.5),并且根据vmstat的IO也是相当合理的.
这是一个例子:
mysql> update FooTable set BarColumn=1349981286086 where varcharPK='e4348411-0fbb-460a-80f7-f1de304a9f7c'
Query OK, 1 row affected (44.94 sec)
Rows matched: 1 Changed: 1 Warnings: 0
mysql> show profile for QUERY 1;
+----------------------+-----------+
| Status | Duration |
+----------------------+-----------+
| starting | 0.000030 |
| checking permissions | 0.000004 |
| Opening tables | 0.000007 |
| System lock | 0.000003 |
| Table lock | 0.000003 |
| init | 0.000035 |
| Updating | 44.949727 |
| end | …
Run Code Online (Sandbox Code Playgroud) 我有一个运行Percona Xtradb服务器的数据库服务器,还有5个从属服务器。我总是得到错误
mysql错误:无法创建新线程(errno 11);如果您没有足够的可用内存,则可以查阅手册以获取可能的操作系统相关错误
虽然我设置了无限
root@master:~# ulimit -a
core file size (blocks, -c) 0
data seg size (kbytes, -d) unlimited
scheduling priority (-e) 0
file size (blocks, -f) unlimited
pending signals (-i) 2062915
max locked memory (kbytes, -l) 64
max memory size (kbytes, -m) unlimited
open files (-n) 1000000
pipe size (512 bytes, -p) 8
POSIX message queues (bytes, -q) 819200
real-time priority (-r) 0
stack size (kbytes, -s) 8192
cpu time (seconds, -t) unlimited
max user processes (-u) 1000000 …
Run Code Online (Sandbox Code Playgroud) 我一直试图在ansible中创建一个percona角色并且在它失败.我不会说失败,但它没有按计划运作.以下是该角色的片段
- name: Setting up percona server apt-key
apt_key:
id=1C4CBDCDCD2EFD2A
keyserver=keys.gnupg.net
state=present
Run Code Online (Sandbox Code Playgroud)
运行此时,我最终得到以下错误:
failed: [192.168.56.107] => {"cmd": "apt-key adv --keyserver keys.gnupg.net --recv 1C4CBDCDCD2EFD2A", "failed": true, "rc": 2}
stderr: gpg: requesting key CD2EFD2A from hkp server keys.gnupg.net
gpg: no valid OpenPGP data found.
gpg: Total number processed: 0
Run Code Online (Sandbox Code Playgroud)
正如您所看到的,ansible执行以下命令:apt-key adv --keyserver keys.gnupg.net --recv 1C4CBDCDCD2EFD2A
同时,从percona 存储库页面实际工作,测试和推荐的命令
是apt-key adv --keyserver keys.gnupg.net --recv-keys 1C4CBDCDCD2EFD2A
.前者只是--recv和后者是--recv-keys的命令有所不同.我不知道如何使用ansible命令模块本身来运行此命令.
在percona下载页面上找到这个url到repo键,可以在apt_key模块而不是keyserver中使用.
我感兴趣的是,是否可以使用--recv-keys运行实际的apt_key命令
我安装了Percona Toolkit pt-show-grants
但它没有出现所有的补助金.当我运行它时,我看到以下输出:
-- Grants dumped by pt-show-grants
-- Dumped from server Localhost via UNIX socket, MySQL 5.5.43-log at 2015-06-11 09:19:19
-- Grants for 'bob'@'12.34.56.78'
GRANT SUPER ON *.* TO 'bob'@'12.34.56.78' IDENTIFIED BY PASSWORD '*4F72B97CAAAAAAAAAAA9C38064C4CCB18CA0DD8';
GRANT SELECT ON `mydb`.* TO 'bob'@'12.34.56.78';
...
Run Code Online (Sandbox Code Playgroud)
在这种情况下,bob
只是一个用户.但是,所有网站都使用特定的凭据,例如开发人员Bob可能拥有他的example.com网站的帐户,称为bob_examplecom_1
.当我显示此帐户的拨款时:
mysql> SHOW GRANTS FOR 'bob_examplecom_1'@'localhost';
+-------------------------------------------------------------------------------------------------------------------------+
| Grants for bob_examplecom_1@localhost |
+-------------------------------------------------------------------------------------------------------------------------+
| GRANT USAGE ON *.* TO 'bob_examplecom_1'@'localhost' IDENTIFIED BY PASSWORD '*74AE8018AAAAAAAAAAAAAAAABB87B5C83E650CB' |
| GRANT ALL PRIVILEGES ON `bob_core`.* TO 'bob_examplecom_1'@'localhost' …
Run Code Online (Sandbox Code Playgroud) 我在mysql表中有一个存储为json的字符串.我需要解析字符串并在存储过程中返回值.
Mysql 5.5是否支持此功能?
我遇到过这个UDF:https://github.com/ChrisCinelli/mysql_json
不幸的是,由于操作问题,我无法在我的mysql服务器上安装此UDF.
如何在mysql中解析json?
注意:我们使用percona版本的MySQL
我不想问一个主观的"哪个DBMS最好?" 或"这两个DBMS哪个更好?".这不一定是一场粉丝辩论.
相反,我欢迎任何基准测试结果或特定经验,当谈到一个特定的标准 - 性能 - 特别是对于一个特定的应用程序:WordPress.
据我所知,WordPress不使用InnoDB,因此在MySQL中禁用InnoDB可以加快速度.另一方面,Percona是一个MySQL分支,用XtraDB取代InnoDB,并声称是高效,高性能的.
在运行WordPress时,每个如何叠加性能?(不需要竞争......对于我所知道的一切,两者都可能看起来很好看)
我一直尝试在Google上进行搜索,但是没有遇到过智能讨论,更不用说性能基准测试了.
如果这里的任何专家能够分享他们的经验,我将不胜感激.非常感谢!
请保持任何自鸣得意的讽刺评论,例如"为什么不试试"给自己.如果可以,我愿意.Stack Overflow的目的是分享专业知识并相互学习,而不是自己做所有事情.
问题总结:
在尝试将带有 mysql 数据库的站点从 latin1 转换为 utf8 时,尽管确保字符集都是 utf8 系统范围,但某些特殊字符无法正确显示。
问题详情:
这是一个常见的问题。但我似乎有一个额外的复杂性。
多年前,一个不经意的开发人员(我)将一个站点与 MySQL 放在一起。一些表是用 latin1_swedish_ci 和 utf8_general_ci 设置的。所有输入/显示都是通过带有 iso-8859-1 字符集的页面完成的。
现在,我的任务是将所有这些数据转换为 utf-8,从而最终统一编码。但是,我在这两种情况下都遇到了许多特殊字符的问题(即:ü)。字符似乎无法在 UTF-8 页面上正确显示。它们显示为 ?。相反,当在 mysql 查询浏览器中查看 utf8 表中的数据时,正确输入的 utf8'd 'u' 显示为一些特殊字符,而错误的 latin1 'u' 显示为它应该出现在页面上。但事实并非如此。
我尝试了很多事情:
似乎没有什么可以治愈数据。
转储整个数据库和重要的并不是一个真正可行的选择,因为它现在是一个巨大的数据库并且停机时间受到限制。
更新(2013 年 10 月 22 日)
我已经采纳了@deceze 的建议,并按照http://kunststube.net/frontback/审查了我所有的内容编码区域。我确实找到了一些我仍然在 latin1 中传递/编码数据的地方。所以,我现在已经把它全部改成了 UTF-8。但是,数据在特定字段中仍然显示不正确。在 utf8 中的表中(没有列具有隐式编码),field1 在 latin1 中。我可以通过运行以下正确显示文本的命令来确认这一点:
从我的表中选择 convert(cast(convert(field1 using latin1) as binary) using utf8) WHERE id = …
我正在研究使用 pt-online-schema-change 来协助某些迁移,其中 ALTER TABLE 命令会导致较长的维护窗口。我知道 pt-online-schema-change 将创建表的空副本以执行 ALTER TABLE 命令,然后将行从旧表批量迁移到新表,并创建触发器来管理临时的数据更改。
但是,当新表与旧表交换时,是否可以在此时暂停,以便我们可以用新的代码库部署来计时?我在文档中没有看到这个问题。显然,我们新版本(使用 Symfony)的 PHP ORM(原则)将期望某个模式就位,并且如果交换发生在代码库部署之前或之后,将会导致问题。
一个相关的问题是我知道必须在所有子表上更新外键约束,因为否则它们仍然会引用旧表。这是否意味着此阶段是在维护窗口之后完成的?如果我们将数据迁移的时间安排与特定代码库的发布一致,我不知道如何提前做到这一点。