我正在导入 7 GBfoobar.sql以恢复本地数据库中的表。
$ mysql -h localhost -u root 'my_data' < foobar.sql
$ mysql --version
/usr/local/mysql/bin/mysql Ver 14.12 Distrib 5.0.96, for apple-darwin9.8.0 (i386) using readline 5.1
Run Code Online (Sandbox Code Playgroud)
我如何监控它的进度?
我发现我的大多数客户根本没有记录他们的数据库,我觉得这很可怕。为了介绍一些更好的实践,我想知道人们正在使用哪些工具/流程。
我不是在谈论逆向工程/记录现有数据库,而是主要讨论开发系统/数据库时的文档最佳实践。
我有一个繁忙的数据库,只有 InnoDB 表,大小约为 5GB。数据库在使用 SSD 磁盘的 Debian 服务器上运行,我设置了最大连接数 = 800,这有时会饱和并使服务器停止运行。平均每秒查询约 2.5K。所以我需要优化内存使用,为最大可能的连接腾出空间。
我已经看到建议 innodb_buffer_pool_size 应该高达总内存的 %80。另一方面,我从调整引物脚本中收到此警告:
Max Memory Ever Allocated : 91.97 G
Configured Max Per-thread Buffers : 72.02 G
Configured Max Global Buffers : 19.86 G
Configured Max Memory Limit : 91.88 G
Physical Memory : 94.58 G
Run Code Online (Sandbox Code Playgroud)
这是我当前的 innodb 变量:
| innodb_adaptive_flushing | ON |
| innodb_adaptive_hash_index | ON |
| innodb_additional_mem_pool_size | 20971520 |
| innodb_autoextend_increment | 8 |
| innodb_autoinc_lock_mode | 1 |
| innodb_buffer_pool_instances | 1 …Run Code Online (Sandbox Code Playgroud) 我有一个带有 InnoDB 数据库的 symfony 应用程序,它有 57 个表,大约 2GB。数据库的大部分大小驻留在单个表中(~1.2GB)。我目前正在使用 mysqldump 每晚备份数据库。
由于我的 comcast 连接,通常如果我手动运行转储,我与服务器的连接将在转储完成之前超时,导致我不得不重新运行转储。[我目前运行一个每晚执行转储的 cron,这仅适用于我手动运行的转储。]
有没有办法加快连接超时问题的转储,同时也可以限制服务器被这个进程占用的时间?
顺便说一句,我目前正在努力减少整个数据库的大小来解决这个问题。
在为我之前问的另一个问题创建测试数据库时,我记得可以声明主键 NONCLUSTERED
什么时候使用NONCLUSTERED主键而不是CLUSTERED主键?
提前致谢
如何将 MySQL 表从一台物理服务器移动到另一台物理服务器?
例如这个确切的场景: 我有一个使用 innodb 表的 MySQL 服务器,大小约为 20GB。
我想将其移至新服务器,最有效的方法是什么?
我在 mysql 中有 MM 复制,我想在框中挤出一些可用空间以删除不必要的文件,我在mysql-bin里面遇到了这些文件/var/db/mysql/有数百个这样的文件mysql-bin.000123,mysql-bin.000223等等。我已经检查了 mysql 复制show master status,show slave status它们是在某些位置使用一些 mysql-bin 文件,但我猜所有其他 bin 文件都是剩余的,不会再使用了。在这种情况下,删除除复制当前指向的文件之外的所有 mysql-bin 文件是否安全?
如果删除是安全的,那么我可以做些什么来在不使用这些文件时自动删除它们?
所以我对调整 InnoDB 还很陌生。我正在慢慢地将表(在必要时)从 MyIsam 更改为 InnoDB。我在 innodb 中有大约 100MB,所以我将innodb_buffer_pool_size变量增加到 128MB:
mysql> show variables like 'innodb_buffer%';
+-------------------------+-----------+
| Variable_name | Value |
+-------------------------+-----------+
| innodb_buffer_pool_size | 134217728 |
+-------------------------+-----------+
1 row in set (0.00 sec)
Run Code Online (Sandbox Code Playgroud)
当我去更改innodb_log_file_size值时(例如mysql 的 innodb 配置页面上的my.cnf注释将日志文件大小更改为缓冲区大小的 25%。所以现在我的 my.cnf 看起来像这样:
# innodb
innodb_buffer_pool_size = 128M
innodb_log_file_size = 32M
Run Code Online (Sandbox Code Playgroud)
当我重新启动服务器时,出现此错误:
110216 9:48:41 InnoDB:初始化缓冲池,大小 = 128.0M
110216 9:48:41 InnoDB:缓冲池初始化完成
InnoDB:错误:日志文件 ./ib_logfile0 的大小不同 0 5242880 字节
InnoDB:比指定的.cnf 文件 0 33554432 字节!
110216 9:48:41 [错误] …
我有这个巨大的 32 GB SQL 转储,我需要将其导入 MySQL。我以前不必导入如此庞大的 SQL 转储。我做了通常的:
mysql -uroot dbname < dbname.sql
Run Code Online (Sandbox Code Playgroud)
时间太长了。有一个大约有 3 亿行的表,在大约 3 小时内达到了 150 万行。因此,整个过程似乎需要 600 小时(即 24 天)并且不切实际。所以我的问题是,有没有更快的方法来做到这一点?
innodb_flush_log_at_trx_commit = 2建议的设置似乎没有(明显可见/指数级)改进。mysql ×8
mysqldump ×5
backup ×4
innodb ×4
sql-server ×2
binlog ×1
import ×1
logs ×1
migration ×1
myisam ×1
mysql-5 ×1
mysql-5.0 ×1
performance ×1
primary-key ×1
replication ×1