MySQL 数据库迁移工作小记----连接抓取、展示与异常连接

背景:由于公司机房网络调整,需要调整一批mysql 数据库的服务器IP,在新环境中已经搭建好新架构(keepalive+lvs),并需要开发工程师配合修改程序配置,共有2个业务,9台服务器,50多个实例。

1、抓取连接脚本

---从繁重的重复工作中解脱出来

为了使切换的过程更高效并解放自己的双手,编写了简单的shell脚本,定时抓取连接并存储至核心数据库,简单的例子:

#!/bin/bash
                                                                                                   
StatFile="/var/log/status/processlist.txt"
#获取IP信息        
IP=`/sbin/ifconfig | egrep -A 1 "eth[0-4] " | egrep "inet " | egrep -v "192.168|:10."| awk -F‘[ :]+‘ ‘{print $4}‘ | sed -n "1p"`
if [[ $IP = ‘‘ ]]       
then           
IP=`/sbin/ifconfig | egrep -A 1 "eth[0-4] " | egrep "inet " | egrep  "192.168|:10."| awk -F‘[ :]+‘ ‘{print $4}‘ | sed -n "1p"`       
fi
# port.txt 存储端口号
cat /var/log/port.txt | while read port                                                                                   
do              
    /bin/mysql -h数据库IP -uroot -p‘密码‘ -P$port information_schema -Bse "select ‘$IP‘,‘$port‘,user,substring_index(host,‘:‘,1) as host from  PROCESSLIST where user not in (‘root‘,‘system user‘) group by user,substring_index(host,‘:‘,1);" > $StatFile
# 此处将show processlist信息存入文件,也可直接循环执行
# 将文件中信息存入核心数据库,忽略表结构           
    cat $StatFile | while read ip  port username host           
    do                   
        /bin/mysql  -h数据库IP -u用户名  -p 密码’ -P端口  库名 -Bse "insert into mysql_db_proce(db_ip,port,username,app_host) values (‘$IP‘,‘$port‘,‘$username‘,‘$host‘);"           
    done       
done

2、信息展示

-----让我的结果更好看

①抓取连接脚本加入到计划任务中,每分钟执行一次

②这时可以从核心库中查看到连接信息,根据表中的update_time字段判断当前最新时间的连接情况

③可以使用sql语句进行查询,但仍比较繁琐,众多的服务器依然需要重复执行sql,让人厌烦

④因此使用了最近学习的python用 django 搭建了简单的web页面进行展示,具体的结构都很简单,就是从数据库中查询数据,传到模板中进行渲染就好了

默认展示最近一分钟数据,添加了搜索框,可以根据IP,端口号进行筛选。

⑤这样在与开发进行沟通的时候,更加清晰,再也不是黑白页面了(●ˇ?ˇ●),虽然很简单

3、碰到的连接异常

整个工作进行的很顺利,但在切换到最后的时候,页面中看到有一个业务的写库一直有一台web的连接进来,于是询问开发是否有配置未同步,

他搜索了很久告诉我用到的地方都已经修改完了,没找到。

抓到的连接显示是他的服务器,因此需要帮助他定位到问题点

①开启mysql general-log抓取连接具体信息(因为此时主库已不可写,binlog中查不到信息),根据页面信息,抓取了五分钟数据,

查找到具体执行的sql,提供给开发确认

②开发以知晓具体程序,但检查配置已经修改了,怀疑是其他单独布置的脚本未使用vip,因此抓取网络信息,查看使用的是什么ip连接的数据库

在数据库服务器上执行命令:

netstat –lna | grep ‘应用程序IP’

即可看到该程序使用的数据库IP是什么,发现确实为VIP,此时我们已经解决不了该问题了,需要交给开发仔细查找

③最后,经过他告诉我说是有一个进程,从昨天开始就一直在执行,新配置没生效

④纪录下这个问题,以后可能还会遇到,修改配置后,最好把程序进程都检查一遍

4、思考

DBA进行数据库变更后,每次都需要开发配合进行修改,这应该存在架构上的问题,每次都需要开发等到半夜很久,也是令人讨厌的一件事

怎样在架构上进行更改,让数据库配置对应用程序透明,做到基本无感,应该是接下来应该考虑的事情。 夜深人静,晚安

时间: 2024-12-24 22:48:36

MySQL 数据库迁移工作小记----连接抓取、展示与异常连接的相关文章

MySQL数据库迁移(转)

MySQL数据库迁移(数据文件直接迁移) 在今年10月下旬的时候,公司的服务器需要迁移,其中涉及到了MySQL数据库迁移.查看了一下MySQL数据文件的大小,接近60G的大小(实际数据并没用那么多).由于服务器上业务需要,要尽量减少服务器迁移时的损失.所以迁移时间选在了晚上零点开始,而且要尽量减少迁移所用的时间. 在迁移之前有三种方案: 数据库直接导出,拷贝文件到新服务器,在新服务器上导入. 使用[MySQL GUI Tools]中的 MySQLMigrationTool. 数据文件和库表结构文

EF6 Codefirst+MySql 数据库迁移

简介 项目使用MSSql作为数据库,但是因为SQL服务器贵那么一点,并发连接差那么一点,要把数据迁移到MySQL,顺带迁移过程以及问题. 环境 · Visual Studio 2013 · MySQL 5.7 · Entity Framework 6.1.3 正文 迁移过程 1. 安装MySQL,顺带安装 MySQL for Visual Studio.MySQL Connector Net 2. 在Entity Framework 项目和 WebSite项目中添加Nuget包,MySql.Da

MySQL数据库迁移详细步骤

========================================================================================== 一.背景简介 ========================================================================================== 1.问题描述 由于机房搬迁,需要对后台DB服务器进行迁移,同时为了保证在数据迁移过程中,对线上业务不造成影响,并能够做到秒

mysql数据库迁移文档

数据库迁移文档 一.需求 确保数据库稳定的运行,为开发人员提供方便的测试数据库和生产数据库的环境. 二.数据库整体架构(master/slave) 三.数据库迁移备份还原操作 测试数据库导出操作 mysqldump -uroot -p123456 miss8 > miss8.sql Master节点,Slave节点导入数据库 mysql -uroot -piminerroot miss8 < miss8.sql 四.数据库迁移具体配置 一定要确保Master节点和Slave节点数据相同 配置M

MySQL数据库迁移详细步骤(转)

========================================================================================== 一.背景简介 ========================================================================================== 1.问题描述 由于机房搬迁,需要对后台DB服务器进行迁移,同时为了保证在数据迁移过程中,对线上业务不造成影响,并能够做到秒

MYSQL数据库迁移到POSTGRESQL数据库(人工迁移)

产品即将上线,可项目经理说要换数据库,要把mysql数据库的内容全部搬到Postgresql中去. 有一个python的工具可以实现迁移(但是存储过程无法迁移.数据类型也无法灵活对应,还要改程序),为了节约时间采用人工迁移的方式,闲话少说,以下是迁移过程,没图,对不起. 利用Navicat for Mysql工具(其它工具也可以,比如mysqldump)将数据库模式导出(只导表结构不含数据)方法略,生成的文件名为mysql.sql 利用linux sed工具把导出的脚本中的所有COMMENT及m

MySql数据库迁移图文展示

MySql数据库的数据从一台服务器迁移到另外一台服务器需要将数据库导出,再从另外一台服务器导入.方法有很多,MySql配套的相关工具都有这个功能.phpMyAdmin就可以做,但是这个加载起来慢,推荐使用MySql WorkBench带的导入导出功能. 第一步:将本地服务器的数据库导出: 点击开始导出之后出现这样的画面表示成功了. 第二步:将生成的.sql文件上传到服务器 第三步:在服务器上打开mysql workbench,将上述文件导入: 点击开始导入,出现这样的画面表示导入成功: 然后看左

mysql数据库迁移到另一个硬盘上

archliun系统mysql数据库 1.对新硬盘分区与格式化 1)# fdisk /dev/sdb 2) # mkfs.ext4 /dev/sdb1 2.停止MYSQL服务 systemctl stop mysqld 3.对数据库文件拷贝 # cp -Rp data /mnt/data/ 4.删除原data文件 # rm -rf /data 5.禁止开机自启MYSQL服务 # systemctl disable mysqld 6.对自启sdb1分区挂载到data # vi  /etc/fsta

刚刚完成了在vs2013中通过 ef连接mysql数据库的工作。感觉没有想象中的简单。试了n次终于成功。故记录成功的方法,希望可以帮到大家

分两种情况,如果你是用entity framework 5.0的时候 mysql-connector-net的版本不是很重要. MySQL For VisualStudio的版本也不重要 (这个不装就不能选择连mysql) 如果你是要用entity framework 6.0的时候就麻烦点了,mysql-connector-net用最新的mysql-connector-net 6.9.6(下载地址:http://cdn.mysql.com/Downloads/Connector-Net/mysq