在客户现场遇到的数据库问题,及方案处理

文章讲述了在客户现场遇到的五个数据库问题,包括接口写入时字符长度限制、库迁移后的数据校验、goterrno28错误、空间不足导致的备份问题以及生产与测试环境的字段差异。作者提供了详细的解决方案和注意事项。
摘要由CSDN通过智能技术生成

问题1、通过接口写入数据库未成功

描述:由第三方提供接口,我从接口接入数据到数据库后,再从数据库拿出来数据传到另一平台上。

(1)从数据库拿数据到平台,接口是否正常?正常。

(2)从第三方拿数据写入到数据库,接口是否正常?不正常,显示某应用系统长度过长。

解决方案:延长字符长度

(1)到数据库中查询此表,如表名t1,连接数据库后desc t1;可以看到字段以及类型,如下所示,SYSTEM_NAME为char(124)。

mysql> desc t1;
+-----------------+-----------+------+-----+---------+-------+
| Field           | Type      | Null | Key | Default | Extra |
+-----------------+-----------+------+-----+---------+-------+
| SYSTEM_NAME_OLD | char(180) | YES  |     | NULL    |       |
| SYSTEM_CODE     | char(255) | YES  |     | NULL    |       |
| NUM             | int(11)   | YES  |     | NULL    |       |
| SYSTEM_NAME     | char(124) | YES  |     | NULL    |       |
+-----------------+-----------+------+-----+---------+-------+
4 rows in set (0.00 sec)

(2)将类型char(124)增至char(1024)。—直接改风险有些大,可能先备份,再修改。

先说下直接增加字段长度的。

mysql> alter table t1 change SYSTEM_NAME SYSTEM_NAME VARCHAR(1024)
    -> ;
Query OK, 2 rows affected (0.22 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> desc t1;
+-----------------+---------------+------+-----+---------+-------+
| Field           | Type          | Null | Key | Default | Extra |
+-----------------+---------------+------+-----+---------+-------+
| SYSTEM_NAME_OLD | char(180)     | YES  |     | NULL    |       |
| SYSTEM_CODE     | char(255)     | YES  |     | NULL    |       |
| NUM             | int(11)       | YES  |     | NULL    |       |
| SYSTEM_NAME     | varchar(1024) | YES  |     | NULL    |       |
+-----------------+---------------+------+-----+---------+-------+
4 rows in set (0.00 sec)
./mysqldump -umysql -pMysql@123  test123  t1 >   /mysqltest/test/t1.sql;
alter table t2 change SYSTEM_NAME SYSTEM_NAME VARCHAR(1024)

select distinct SYSTEM_CODE from t1;
select NUM from t1 group by SYSTEM_CODE having count(*)>1;

insert into t2(SYSTEM_NAME_OLD,SYSTEM_CODE,NUM,SYSTEM_NAME) values ("应用系统4","ABCD",4,null)

select NUM from t1 group by SYSTEM_CODE having count(*)>1;

select NUM from t1 group by SYSTEM_CODE='ABCD'  having count(*)>1;

insert into t2(SYSTEM_NAME_OLD,SYSTEM_CODE,NUM,SYSTEM_NAME) values ("应用系统5","ABCDE",5,null);

问题2、库迁移,核对数据库表的大小

./mysqldump -umysql -p -P3306 -S /mysqldata/3306/socket/mysql.sock 
库迁移后,不确定数据是否准确,表的数量虽然一致,但还是想从数据方面查看。
SELECT table_schema AS "Database",SUM(data_length+index_length)/1024/1024/1024 AS "Size(GB)" FROM information_schema.TABLES WHERE table_schema="db_vmdb";
SELECT table_schema AS "Database",SUM(data_length+index_length)/1024/1024 AS "Size(MB)" FROM information_schema.TABLES WHERE table_schema="db_vmdb";

问题3、got errno 28 on write

正在备份mysql数据文件,报错got errno 28 on write。

./mysqldump -uroot -p -P3306 -S /mysqldata/3306/socket/mysql.sock --skip-disable-keys --skip-add-locks --set-gtid-purged=OFF  --master-data=2  --databases db_vmdb > /home/appadmin/db_vmdb.sql
此时会让输入密码,Enter password:
输入密码后回车,他就运行正在往指定路径/home/appadmin/备份db_vmdb.sql文件,但稍后报了个got errno 28 on write。

后来才知道是因为空间不足导致,就是/home/appadmin这个空间已经满了,还弄了个高级告警,属于极为严重的生产事件!所以在备份库的时候,首先要确认库的大小,然后确认目录空间大小,确保能包得住的情况下再备份!!!希望这个问题大家都不会碰到!

问题4、无法将查询结果导出,用命令截取数据复制出来

从sys_tran表中第10行开始查询,查100行,返回结果为:app_code字段、app_name字段和describe字段左侧前100个字符。

结构:select A字段,B字段,left(C字段,100) from 表明 limit n从第几行查,要返回多少条数据;
select  app_code,app_name,left(describe,100) from sys_tran limit 10,100;

问题5、生产与测试字段差异

字段不同
查询方法
(1)desc test1;
可以看test1表中的字段结构
(2)show create table test1;
可以看创建test1表的语句。
发现差异后的解决方法
少字段,增加字段。
(1)alter table test1 add column column decimal(16,0) after id;
(2)alter table test2 add column column1 decimal(16,0), add column column decimal(16,0);

  • 4
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值