我有一个现在需要支持 4 字节字符(中文)的数据库。幸运的是,我已经在生产环境中安装了 MySQL 5.5。
所以我只想将所有 utf8_bin 归类为 utf8mb4_bin。
我相信除了一点存储开销之外,这种变化没有性能损失/收益。
这让我发疯!
我想在我的博客表中将一列从 read-more 重命名为 read_more
我尝试了所有这些:
ALTER TABLE blog RENAME COLUMN read-more to read_more;
ALTER TABLE blog CHANGE COLUMN 'read-more' 'read_more' VARCHAR(255) NOT NULL;
Run Code Online (Sandbox Code Playgroud)
我总是得到这个!
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'COLUMN read-more to read_more' at line 1
Run Code Online (Sandbox Code Playgroud)
我正在使用 MySQL 5.5
MySQL的SHOW GRANTS显示当前用户的权限。
有没有办法以root身份登录并显示所有用户的权限?
我有一个 Postgres 数据库,其中包含有关服务器集群的详细信息,例如服务器状态(“活动”、“待机”等)。活动服务器在任何时候都可能需要故障转移到备用服务器,我不在乎特别使用哪个备用服务器。
我想要一个数据库查询来更改备用服务器的状态 - 只有一个 - 并返回要使用的服务器 IP。选择可以是任意的:因为服务器的状态随着查询而改变,所以选择哪个备用数据库并不重要。
是否可以将我的查询限制为一次更新?
这是我到目前为止所拥有的:
UPDATE server_info SET status = 'active'
WHERE status = 'standby' [[LIMIT 1???]]
RETURNING server_ip;
Run Code Online (Sandbox Code Playgroud)
Postgres 不喜欢这样。我可以做些什么不同的事情?
如果我有一个包含列的表:
id | name | created_date
Run Code Online (Sandbox Code Playgroud)
并想添加一列,我使用:
alter table my_table add column email varchar(255)
Run Code Online (Sandbox Code Playgroud)
然后在列之后添加created_date列。
有什么办法可以指定新列的位置吗?例如,我可以在之后添加它name并得到一个表格,如:
id | name | email | created_date
Run Code Online (Sandbox Code Playgroud) 我写了一个脚本来REINDEX索引数据库中的索引。这是其中之一:
echo -e "\nreindex for unq_vbvdata_vehicle started at: `date "+%F %T"`" >> ${LOG_FILE}
psql -U ${USERNAME} -h ${HOSTNAME} -d ${DBNAME} -c "REINDEX INDEX scm_main.unq_vbvdata_vehicle;"
if [[ ${?} -eq 0 ]]; then
echo "reindex for unq_vbvdata_vehicle finished at: `date "+%F %T"`" >> ${LOG_FILE}
else
echo "reindex for unq_vbvdata_vehicle failed" >> ${LOG_FILE}
exit 1
fi
Run Code Online (Sandbox Code Playgroud)
问题是我无法在独立模式下运行此脚本。psql每次运行都提示输入密码。还有两个限制:
我无法在没有密码的数据库上创建用户。
因为REINDEX锁表,我应该sleep <num>在每个REINDEX.
有没有自动解决方案?
我正在尝试使用该命令备份 mysql
mysqldump -u root -p database_name > backup.sql
Run Code Online (Sandbox Code Playgroud)
,但它抛出一个错误:
'拒绝访问; 尝试转储表空间时,您需要(至少其中之一)此操作的 PROCESS 特权
另外,我想备份我的数据库,并将所有表单独存储为一个文件。我该怎么做?
mysql 版本 = 5.7.31
在我工作的系统中有很多使用临时表的存储过程和 SQL 脚本。使用这些表后,最好删除它们。
我的许多同事(几乎所有人都比我更有经验)通常会这样做:
TRUNCATE TABLE #mytemp
DROP TABLE #mytemp
Run Code Online (Sandbox Code Playgroud)
我通常DROP TABLE在我的脚本中使用单个。
在 aTRUNCATE之前立即执行 a 有什么好的理由DROP吗?
我有这个巨大的 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建议的设置似乎没有(明显可见/指数级)改进。我正在编写一个需要存储和分析大量电气和温度数据的应用程序。
基本上,我需要存储过去几年和未来数万个地点的大量每小时用电量测量值,然后以不太复杂的方式分析数据。
我需要(目前)存储的信息是位置 ID、时间戳(日期和时间)、温度和电力使用情况。
关于需要存储的数据量,这是一个近似值,但大致如下:
20 000 多个位置,每月 720 条记录(每小时测量,每月大约 720 小时),120 个月(10 年前) ) 和未来许多年。简单的计算得出以下结果:
20 000 个位置 x 720 条记录 x 120 个月(10 年前)= 1 728 000 000 条记录。
这些是过去的记录,新记录将每月导入,因此每月大约有 20 000 x 720 = 14 400 000 条新记录。
总位置也将稳步增长。
对于所有这些数据,需要执行以下操作:
数据将每月写入一次,但会被数百名用户(至少)不断读取,因此读取速度更为重要。
我没有使用 NoSQL 数据库的经验,但从我收集到的信息来看,它们是此处使用的最佳解决方案。我已经阅读了最流行的 NoSQL 数据库,但由于它们完全不同,并且还允许非常不同的表架构,我一直无法决定使用什么是最好的数据库。
我的主要选择是 Cassandra 和 MongoDB,但由于我的知识非常有限,而且在大数据和 NoSQL 方面没有实际经验,我不太确定。我还读到 …
mysql ×5
postgresql ×3
mysqldump ×2
backup ×1
concurrency ×1
innodb ×1
mysql-5 ×1
mysql-5.5 ×1
mysql-5.7 ×1
nosql ×1
permissions ×1
psql ×1
queue ×1
sql-server ×1
sybase ×1
truncate ×1
update ×1