我希望创建一个 cron 作业来备份我的 MySQL 数据库。我正在使用这个命令:
$ mysqldump --user="User" --password="Password" -A
--single-transaction > /home/user/Export-`date +"%F"`.sql
Run Code Online (Sandbox Code Playgroud)
这导致 2.5 MB 的文件大小。但是,当我使用同一用户使用 phpMyAdmin 导出功能时,我得到一个 3.7 MB 的文件。
有人可以解释这些差异吗,如果我做错了什么?
我有需要支持 3 种不同语言的新 SQL Server 数据库。
如果我希望我的数据库支持以下内容,我需要选择哪些字符集和排序规则:
我们公司的服务器目前托管在 VPS 上,我们决定迁移到专用服务器。
在为数据库服务器选择最佳硬件时,我们应该投入更多资源:更好的 CPU(更多内核)?或更多的内存?
最佳投资回报率在哪里?
有什么建议?
我有两张桌子 -comments和votes:
comments(id, text, user_id, page_id)
votes(id, value)
Run Code Online (Sandbox Code Playgroud)
表中有 2,000,000 行votes。
我创建了以下查询:
SELECT SUM(votes.value),
comments.text,
comments.comment_id
FROM comments, votes
WHERE comments.comment_id = votes.comment_id AND comments.page_id = $page_id
GROUP BY comment_id;
Run Code Online (Sandbox Code Playgroud)
查询运行了大约 12 秒,这正常吗?
SHOW PROCESSLIST说它复制到临时表。这看起来很慢,是否需要使用临时表?
作为一般规则,如果它们确实是确定性的,我是否应该使用 DETERMINISTIC 关键字声明所有存储过程?
在我看来,大多数存储过程都是确定性的。我认为唯一的非确定性过程是调用 RAND() 或 CURDATE() 等非确定性函数的过程是否正确?
无论如何,我问的原因是因为当我在 MySQL Workbench 中使用数据恢复功能时,我收到此错误:
ERROR 1418 (HY000) at line 1209: This function has none of DETERMINISTIC, NO SQL, or READS SQL DATA in its declaration and binary logging is enabled (you *might* want to use the less safe log_bin_trust_function_creators variable)
Run Code Online (Sandbox Code Playgroud)
简单地设置“log_bin_trust_function_creators=1”是更好的做法吗?请记住,我有 50 多个存储过程。
我有两个经常更新的表,一个是直接的UPDATE ..,另一个是直接的,INSERT .. ON DUPLICATE KEY UPDATE ...通常这些查询是即时的,但有时需要 0.1 秒到 1+ 秒,然后又是即时的几秒钟。
另一件事要注意,我有两个 MySQL 服务器(在同一个专用网络中)。所有选择查询(除了一两个)都在从站上执行,这里看到的插入当然在主站上。当数据库处于大负载下时,速度减慢最为明显。最后,我正在使用 xtradb(看看它是否有帮助),但在纯 MySQL 5.5 InnoDB 上发生了相同的行为。
-- CustomData
+-----------+---------+------+-----+---------+-------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+-------+
| Server | int(11) | NO | PRI | NULL | |
| Plugin | int(11) | NO | PRI | NULL | |
| ColumnID | int(11) | NO | PRI | NULL | |
| DataPoint | …Run Code Online (Sandbox Code Playgroud) 如果您比较通过两个表之间的连接获取数据的查询,性能是否会有任何差异,其中与以下任一表存在关系:
我从多个来源看到和听到,将数据库日志和数据文件写入不同的磁盘可能是一个好主意,在性能方面。
推荐的方法是什么(例如在 EC2 上)?
这是我昨天问的一个问题 - /sf/ask/1552650921/。
我得到了一个很好的答案,对我有帮助,但我不明白为什么 LEFT JOIN 比查找慢得多。LEFT JOIN 是 16 秒 - 我很确定我的表至少优化了 90% - 在进行查找时它只有 0.14 秒。当我 LEFT JOIN 表时,它并没有那么慢,为什么要查看?
我们的服务器有磁盘空间问题。因此,复制的 IO 线程无法启动。
以下是mysql错误日志中的错误:
[注意] Slave I/O 线程:连接到 master 'user@host:3307',复制开始于 log 'mysql-bin.000030' at position 196820914
[错误] 从 I/O:从网络读取时复制事件校验和验证失败。错误代码:1743
[错误] 从站 I/O:中继日志写入失败:无法将来自主站的事件排队,错误代码:1595
我该如何解决问题?
mysql ×7
performance ×3
replication ×2
sql-server ×2
amazon-ec2 ×1
backup ×1
collation ×1
determinism ×1
foreign-key ×1
index-tuning ×1
innodb ×1
join ×1
mongodb ×1
mysqldump ×1
view ×1