我们有一个 innodb mysql 数据库,所以我们迷失了许多不同的 mysql 备份策略。有人谈论mysqldump,有人谈论第三方工具。有些表我们还计划运行分区。有什么好工具可以帮助完成这项任务?
我正在尝试使用 SELECT ... INTO OUTFILE 查询转储一个大表(40GB,600,000 行)。我想使用它,因为我希望我的结果以特定方式排序(因此 mysqldump 不够好)。
问题是,我收到错误代码 28。我很确定这是因为默认 /tmp 位置的磁盘空间不足。如果我可以在运行时指定用于 tmp 的位置,我在其他地方的磁盘上有足够的空间。
我发现我可以通过修改 my.cnf 来更改 tmpdir,但是我没有足够的服务器权限来修改它或重新启动 mysqld。
这里的解决方案是什么?
编辑:一些答案建议使用 mysql -e。我可能不得不走这条路并对我的文件进行后处理。我想使用 SELECT ... INTO OUTFILE 的原因是因为我想
fields terminated by '\t'
escaped by '\\'
lines terminated by '\r\n' ;
Run Code Online (Sandbox Code Playgroud) 最初使用 5GB+ 填充数据库以避免大型事务日志时的标准流程是什么?根据我的理解,日志文件会在初始加载后跳转到较大的大小,并且从那时起磁盘空间不会减少。定期事务日志备份将释放文件中的空间,但文件仍会很大。
那么是否建议将目标数据库设置为简单备份,加载数据,使用 CHECKPOINT 截断日志,然后将数据库设置为完全备份模式?
此外,我知道可以对日志执行收缩文件操作,但有人说永远不要使用它,其他人似乎建议将其作为解决方案。有什么想法吗?
我正在尝试将此 CSV 文件导入 MySQL,该文件似乎可选地由多个字符括起来。不幸的是,MySQL 只支持一个字符作为字段分隔符。
我被困在 SQL 中完成整个过程,因为它是更大程序的一部分 - 所以脚本是不可能的。
数据示例:
reportdata, commission, total, chargeback, company
",123,""$116.00 "",""$604.00 "",""($88.00)"", foo
Run Code Online (Sandbox Code Playgroud)
除了尝试在临时表上执行一堆字符串操作之外,我感到很困惑。
有任何想法吗?
我有一个 InnoDB 客户表,按 KEY 分区,每个分区是一个美国州。我有电话号码索引,性能很棒。我们还需要在给定的美国州中按姓氏进行 SELECT。我应该在姓氏 AND 状态上创建索引,还是没有意义,因为表已经按状态分区了?
这是否会占用不必要的空间,因为 InnoDB 应该已经知道哪个分区是哪个状态,并且它只需要在该分区中找到与姓氏匹配的所有行?
我们没有做任何连接......这只是一个简单的查询,如下所示:
SELECT * FROM table WHERE lastname = "Smith" AND state="NY"
Run Code Online (Sandbox Code Playgroud) 假设 (field1, field2) 上有一个复合主键
另外,让 X 是一组理论的 n 个数字
插入看起来像这样:
INSERT INTO table(field1, field2)
VALUES([a number picked at random from X], [an incrementing number]);
Run Code Online (Sandbox Code Playgroud)
每插入 m 个数字,从 X 中随机删除一个数字,并随机添加另一个数字。
假设 n=1000 和 m=500。换句话说,每插入 500 次,集合 X 中的一个元素就会改变,但集合 X 总是有 1000 个元素。
B+树会变得多么支离破碎?
在 MySQL 5.6.7 之前,官方 RPM附带这些文件:
/usr/share/mysql/my-innodb-heavy-4G.cnf
/usr/share/mysql/my-medium.cnf
/usr/share/mysql/my-huge.cnf
/usr/share/mysql/my-large.cnf
/usr/share/mysql/my-small.cnf
Run Code Online (Sandbox Code Playgroud)
在5.6.8中,这些文件都没有了,只剩下一个:
/usr/share/mysql/my-default.cnf
Run Code Online (Sandbox Code Playgroud)
我不是 MySQL 调优专家,过去总是以my-innodb-heavy-4G.cnf. 现在我只剩下一个配置选项:
# Remove leading # and set to the amount of RAM for the most important data
# cache in MySQL. Start at 70% of total RAM for dedicated server, else 10%.
# innodb_buffer_pool_size = 128M
Run Code Online (Sandbox Code Playgroud)
调整这个变量是大多数优化的关键,还是在安装新服务器时我应该调整其他相关参数?
在这种情况下,我在哪里可以找到等效的文件,该文件将包含仅 InnoDB 的 4GB RAM 专用 MySQL 服务器的合理默认值?
我们正在计划一系列服务器/软件升级并且很好奇。
我们有一个运行 MySQL 5.0 的 RHEL5 安装,我们希望将其复制到运行 CentOS 6 和 MySQL 5.5 的新(虚拟化)服务器。然后,将来我们会将 RHEL5 机器撞到 CentOS6 和 MySQL5.5。如果可能,我们希望首先进行此复制。
所以简短的问题是,有没有人尝试将 MySQL 5.0 主服务器复制到 5.5 从服务器?
我正在 PHP 框架(Codeigniter 2.1.0)中开发 LMS 应用程序。我正在使用 MySQL 数据库。数据库中的所有表都有innodb引擎。我还在每个表上创建了索引。现在我正在本地使用 Jmeter 2.9 版同时对 200 个用户进行负载测试。在负载测试期间,在特定页面操作中,我遇到了Deadlock Found错误。我将原始查询更改为新查询,但再次发生相同的错误。
我已经编写了 save_interactions 函数,它需要四个参数交互数组、module_id、course_id、user_id & 被 AJAX 脚本调用了很多次。如果特定的interaction_id 不存在于该表中,则以下脚本将插入记录,否则更新查询将被触发。
public function save_interactions($interaction_array,$modid,$cid,$uid)
{
foreach($interaction_array as $key=>$interact_value)
{
$select_query = $this->db->query("SELECT COUNT(*) AS total FROM `scorm_interactions` WHERE `mod_id`='".$modid."' AND `course_id`='".$cid."' AND `user_id`='".$uid."' AND `interaction_id`='".$interact_value[0]."'");
$fetchRow = $select_query->row_array();
if($fetchRow['total']==1)
{
$update_data = array(
"interaction_type"=>$interact_value[1],
"time"=>$interact_value[2],
"weighting"=>$interact_value[3],
"correct_response"=>$interact_value[4],
"learner_response"=>$interact_value[5],
"result"=>$interact_value[6],
"latency"=>$interact_value[7],
"objectives"=>$interact_value[8],
"description"=>$interact_value[9]
);
$this->db->where('mod_id', $modid);
$this->db->where('course_id', $cid);
$this->db->where('user_id', $uid);
$this->db->where('interaction_id', $interact_value[0]);
$this->db->update('scorm_interactions', $update_data);
}else
{
$insert_data = …Run Code Online (Sandbox Code Playgroud) 我有一张桌子叫做座位,它有这样的架构
身份证号
对于每个用户,我取一个随机未使用的 id 并分配给该用户,这里为简单起见,我使已使用 =1。我正在使用的查询
update seats u inner join (
SELECT id from seats
where taken is null limit 1) s
on s.id = u.id set taken = 1;
Run Code Online (Sandbox Code Playgroud)
此查询随机获取一个带有标记为空的席位,对于该席位,它使标志为 1。虽然此查询工作正常,但此线程安全吗?
考虑这种情况,我有两个并行的用户。对于 user1,我选择第 X 行,就在运行更新查询之前,user2 签入,对于该用户,select 查询返回与 user1 相同的行。所以我将结束两次更新同一行。
此查询是否可能出现这种情况?