• 1. MySQL培训 2009年4月
  • 2. 提纲MySQL的历史和特点 网管为什么使用MySQL MySQL的日常维护 MySQL的常用命令 网管日常遇到的MySQL问题分析 今后网管采集对MySQL的使用想法2018/10/252
  • 3. 1.1 MySQL的历史MySQL是最流行的开放源码的DBMS,它最初是由瑞典MySQL AB公司开发的。结合了开放源码价值取向、方法和成功的商业模型。 MySQL名称的起源不明。10多年来,我们的基本目录以及大量应用程序的命名,均采用了前缀“my”。 3
  • 4. 1.2 MySQL的特点MySQL是一种小型关系型数据库管理系统 MySQL是一种开源软件,使用C和C++编写 支持Solaris、HP-UX、AIX、Linux、Windows等多种操作系统 提供了大量的API(提供了用于C、C++、Perl、Java、PHP) 提供TCP/IP、ODBC和JDBC等多种数据库连接 可以处理拥有上千万条记录的大型数据库4
  • 5. 1.3 MySQL的应用领域数据库的用户数排名: 1、Oracle 2、SQL Server 3、MySQL5
  • 6. 1.3 MySQL的应用领域与其他的大型数据库例如Oracle、DB2、SQL Server等相比,MySQL自有它的不足之处,如规模小、功能有限,但是这丝毫也没有减少它受欢迎的程度。 对于一般的个人使用者、中小型企业来说,MySQL提供的功能已经绰绰有余。目前被广泛地应用在Internet上的中小型网站中。由于其体积小、速度快、成本低,尤其是开放源码这一特点,许多中小型网站为了降低网站总体拥有成本而选择了MySQL作为网站数据库。 6
  • 7. 1.4 Sun收购MySQL2008年1月16日, Sun公司收购MySQL • Sun将帮助MySQL > 扩展市场范围,增加创收机遇 > 通过全球服务提高企业吸引力 > 提高业绩,增强集成功能 > 通过资源加速发展7
  • 8. 1.4 Sun收购MySQL2008年1月16日, Sun公司收购MySQL • MySQL将帮助Sun... > 在价值150亿美元的市场发展 > 找到新的客户 > 实现Web公司产品定位 > 帮助客户实现数据库革新 > 完善其软件平台产品8
  • 9. 1.5 Oracle收购Sun2009年4月20日, Oracle公司收购Sun,猜测MySQL的影响: 目前,MySQL分 免费版(社区开发者使用,BOCO使用的是免费版) 企业版(商业用户,购买MySQL的服务) MySQL可能会取代Oracle的低端产品得到技术支持,并有可能收费 Oracle和MySQL面对不同的用户群,今后MySQL不但不会消失,而且其企业版将会得到大力发展9
  • 10. 2.1 性能数据流向10
  • 11. 2.2 MDDB/MySQL的作用一台采集一个MDDB,采集机分摊了npmdb负荷 将厂家数据(OMC数据库、或者Parser厂家报告后的文本数据),导入MDDB临时表 在MDDB里指标计算,比如: 指标A = 厂家counterB + counterC * counterD 归一化计算,用到大量select、insert、update操作 将MDDB里的tpd表,同步到npmdb/informix,中间要做int_id的计算(CRC32算法) MDDB和npmdb里的tpd表结构是相同的11
  • 12. 3.1 dc_mysql的crontab/opt/dc_mysql/npm_dal/bin/mddb_hour.sh /opt/dc_mysql/npm_dal/bin/mddb_day_run.sh /opt/dc_mysql/npm_dal/bin/mddb_days_run.csh12
  • 13. 3.2 每小时mddb_hour.sh清理-m分钟前的临时表/opt/dc_mysql/var/mddb/下mysql表frm、MYI、MYD文件 delete在/opt/dc_mysql/npm_dal/bin/big_table.list里的tpd大表列表12小时前的数据 delete dal_task里48小时前的记录,并optimize 说明: 命令文件(1)的在/tmp/drop_mysql.sql 命令文件(2)和(3)的在/tmp/hour_delete_mysql.sql mysql的大表列表,现场可以调整big_table.list13
  • 14. 3.3 每天mddb_day_run.sh在线on line维护tpd表(不停库),delete -t天前的记录,并optimize优化 维护dal_log、dal_check_err、dal_adaptor_result等表,日志在/tmp/mddb_day_run.log,sql在/tmp/day_delete_mysql.sql 在线mysqlcheck -q mddb,快速检查、修复、优化、分析mddb里所有MyISAM表14
  • 15. 3.4 每周mddb_days_run.sh停性能npmdal采集 停mysql: /opt/dc_mysql/npm_dal/bin/mddb_stop.sh 停库维护: /opt/dc_mysql/npm_dal/bin/mddb_day_run.pl myisamchk --safe-recover -f /opt/dc_mysql/var/mddb/tpd表 启mysql:/opt/dc_mysql/npm_dal/bin/mddb_start.sh 重启性能npmdal采集 说明: 可以根据现场情况,加大mddb_days_run.csh频度15
  • 16. 4 MySQL的常用命令• 启动MySQL /opt/dc_mysql/npm_dal/bin/mddb_start.sh • 停MySQL /opt/dc_mysql/npm_dal/bin/mddb_stop.sh mysqladmin shutdown • 查看MySQL的参数 SQL语句: show variables 命令:mysqladmin variables • MySQL的日志文件 /opt/dc_mysql/var/*.err 16
  • 17. 4 MySQL的常用命令• 查看建表脚本 命令: mysqldump -d 库名 表明 mysqldump -d mddb dal_task • 显示所有数据库 show databases; • 显示所有数据表 show tables; 17
  • 18. 4 MySQL的常用命令• 查看正在执行的语句 命令: mysqladmin proc SQL语句:show processlist show full processlist • 杀掉正在执行的语句 命令: mysqladmin kill thread号18
  • 19. 4 MySQL的常用命令• 导出记录到文本文件 select 字段 into outfile unl文件名 fields terminated by ‘|’ from table where 条件; select distinct object_rdn,omc_id into outfile "/opt/dc_mysql/bin/crp_rdn.unl" fields terminated by '|' from tpd_msc; 19
  • 20. 4 MySQL的常用命令• 导入数据文件到表 load data infile "C:\\mysql\\bin\\mysql\\zhongyang.txt“ into table zhongyang fields terminated by "\t"; load /opt/SMserver/sql/smdbv1.21.sql 20
  • 21. 5.1 MySQL的IO高由于在MDDB里,做指标的归一化一算,产生大量MySQl数据文件导入导出,频繁IO。 解决方法: 把读写频繁的文件系统挂接在不同的物理磁盘上,比如把mddb的目录/opt/dc_mysql,和性能/opt/BOCO.DAL/NPM,最好在不同磁盘上 用阵列挂接替换读写频繁的文件系统21
  • 22. 5.2 MySQL的负荷高发现服务器mysqld 的负荷经常在15%以上,一般的原因,一方面索引使用不当,另一方面是厂家采集的mapping没有做优化导致的,一般的处理办法是 用mysqladmin proc来看目前mysql正在执行哪条sql语句,比如 update tmpxxx set slload= (seelct abcd from tmpxxxx); 根据关键字abcd到采集日志下面去查找到底是哪个厂家的sql语句 find $NPMH_HOME/trace -exec grep adcd {} \; -print 根据该厂家的日志具体来判断是由于mapping哪里没有优化的问题:不是index没有利用好就是类型不对或者数据没有做过滤导致的.22
  • 23. 5.3 MySQL表损坏现象:mysql运行一段时间后,日志里报错信息为:Err Info:Can't open file: 'tpd_msc.MYI' (errno: 145)。 'tpd_msc.MYD' (errno: 144) 原因: .MYI是mysql的索引文件。损坏原因是 数据太多,查询又太复杂,结果 update 时就容易被破坏 有时mysqld进程在一个写入当中被杀死 根源是 myisam 的索引问题,索引和数据不在同一个文件中,而且,表结构的描述也是独立文件 23
  • 24. 6.1 使用Innodb存储引擎把MyISAM数据引擎改成innodb,可以避免数据表损坏。特点如下: 提供ACID 事务处理支持,原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。 每个表空间有64TB 数据存储限制 支持B-tree 和clustered索引 支持外关键字 使用行级别锁和隔离级别2018/10/2524
  • 25. 6.2 使用Memory存储引擎Memory存储引擎提供“内存中”表 Memory 表贮存在 RAM中; 关机后数据丢失 支持B-tree和哈希索引 可以添、删、改、查 适用于数据对象的快速查找2018/10/2525
  • 26. 谢 谢!