蓝鲸平台MySQL数据库管理规范建议

MySQL作为蓝鲸平台存取数据的主要数据库,其稳定性关系到蓝鲸平台的使用体验,而其数据安全性则可能关系到企业IT资产相关信息,在安装和维护蓝鲸平台的过程中应引起足够重视。本文将对如下几个出现过的问题进行分析和提供处理建议。这几个问题分别为:升级,配置日志自动清理,binlog手动清理维护,表清空,备份。

?

蓝鲸平台的MySQL数据库会在安装平台时自动安装,其版本为5.5.24,架构为主从复制(5台服务器情况下),下文分别对提到的几个问题进行描述。

MySQL升级

1.问题分析

蓝鲸平台默认安装的MySQL版本为5.5.24,一般不符合安全扫描的版本要求,为了避免在使用过程中由于安全问题需要重新升级数据库,建议在完成平台安装后及时进行数据库升级,此时数据库还没存入业务数据,升级无风险且升级效率高,基于已经在生成环境验证过的升级经验,为防止版本跨度过大导致的兼容问题,建议升级到MySQL5.5的最高版本即5.5.62,采用逻辑升级的方法,使用mysqldump将低版本的据库全库导出,再导入到安装好的新版本。

2. 逻辑升级过程

1、查当前MySQL进程

检查当前运行的MySQL的进程详情,主要是查看启动参数,用于升级后对比

[[email protected] install]# ps -ef |grep mysql

root 20407 8526 0 15:10 pts/3 00:00:00 grep --color=auto mysql

root 29942 1 0 Dec17 ? 00:00:00 /bin/sh /data/bkce/service/mysql/bin/mysqld_safe --datadir=/data/bkce/public/mysql/ --pid-file=/data/bkce/public/mysql/mysql.pid

mysql 30344 29942 5 Dec17 ? 13:17:37 /data/bkce/service/mysql/bin/mysqld --basedir=/data/bkce/service/mysql --datadir=/data/bkce/public/mysql/ --plugin-dir=/data/bkce/service/mysql/lib/plugin --user=mysql --log-error=/data/bkce/public/mysql//paas-1.err --pid-file=/data/bkce/public/mysql/mysql.pid --socket=/data/bkce/logs/mysql/mysql.sock --port=3306

2、全库备份

使用如下命令进行全库备份,备份路径可根据数据量,磁盘性能等进行调整

[[email protected] service]# mysqldump -uroot -x -A -E -R >/tmp/alldbback.sql

3、备份安装目录,数据目录

停止数据库服务,并对basedir,datadir目录进行备份,升级前一定要进行备份,避免出现意外进行回退

[[email protected] service]# mkdir /data/backup

[[email protected] service]# mv mysql/ /data/backup/

[[email protected] service]# cd /data/bkce/public/

[[email protected] public]# mv mysql /data/backup/mysql_data

4、新版本解压安装

使用二进制的包进行解压安装,下载5.5.62版本的压缩包,上传至安装目录进行解压,创建软连接为mysql

[[email protected] service]# tar zxf /tmp/mysql-5.5.62-linux-glibc2.12-x86_64.tar.gz

[[email protected] service]# ln -s mysql-5.5.62-linux-glibc2.12-x86_64/ mysql

5、初始化数据库

对数据目录进行初始化

[[email protected] public]# mkdir mysql

[[email protected] mysql]# cd /data/bkce/service/mysql

[[email protected] mysql]# ./s/mysql_install_db --user=mysql --basedir=/data/bkce/service/mysql --datadir=/data/bkce/public/mysql/

Installing MySQL system tables...

181227 15:39:10 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.

181227 15:39:10 [Note] /data/bkce/service/mysql/bin/mysqld (mysqld 5.5.62-log) starting as process 24766 ...

OK

Filling help tables...

181227 15:39:11 [Note] Ignoring --secure-file-priv value as server is running with --bootstrap.

181227 15:39:11 [Note] /data/bkce/service/mysql/bin/mysqld (mysqld 5.5.62-log) starting as process 24790 ...

OK

To start mysqld at boot time you have to copy

support-files/mysql.server to the right place for your system

PLEASE REMEMBER TO SET A PASSWORD FOR THE MySQL root USER !

To do so, start the server, then issue the following commands:

/data/bkce/service/mysql/bin/mysqladmin -u root password ‘new-password‘

/data/bkce/service/mysql/bin/mysqladmin -u root -h 132.108.252.43 password ‘new-password‘

Alternatively you can run:

/data/bkce/service/mysql/bin/mysql_secure_installation

which will also give you the option of removing the test

databases and anonymous user created by default. This is

strongly recommended for production servers.

See the manual for more instructions.

You can start the MySQL daemon with:

cd /data/bkce/service/mysql ; /data/bkce/service/mysql/bin/mysqld_safe &

You can test the MySQL daemon with mysql-test-run.pl

cd /data/bkce/service/mysql/mysql-test ; perl mysql-test-run.pl

Please report any problems at http://bugs.mysql.com/

6、修改配置并启动

因原my.cnf配置文件未设置pid file,新版启动时会根据主机名自动生成,跟原进程下的pid文件不符,需要在配置文件里添加如下配置:

pid-files=

vim /etc/my.cnf

[mysqld]

/data/bkce/public/mysql/mysql.pid

启动数据库:

/data/bkce/service/mysql/bin/mysqld_safe &

7、导入数据

登录mysql,确认版本已经升级至5.5.62,接下来导入备份的数据

mysql -uroot </tmp/alldbback.sql

等待其导入完成即可。

8、恢复mysql.sh文件

在蓝鲸平台中控机上控制mysql服务的启停,是通过调用安装目录下的mysql.sh文件实现的,所以需要将该文件恢复到新版安装后的目录下

[[email protected] mysql]# cd /data/backup/mysql/bin/

[[email protected] bin]# cp mysql.sh /data/bkce/service/mysql/bin/

9、升级确认

通过中控机查看及启停mysql,检查是否正常

[[email protected] mysql]# cd /data/install/

[[email protected] install]# ./bkcec status mysql

[[email protected] install]#./bkcec stop mysql

[[email protected] install]#./bkcec start mysql

[[email protected] install]# ps -ef |grep mysql

检查蓝鲸平台,查看数据库调用是否正常。到此,整个升级过程完成。

MySQL配置

1.问题分析

我处理过的蓝鲸平台MySQL问题,很多是因为磁盘空间不足导致,而磁盘空间不足多是由于binlog日志过多而未及时清理造成,蓝鲸在客户处使用过程中由于没有专门的运维团队,通常很少去关注后台服务器的情况,所以binlog自动清理的机制强烈建议开启。

2.测试过程

1、设置binlog自动清理

参数expire_logs_days表示超过该参数值的binlog日志会自动清理,可以根据服务器磁盘空间来确定该值的设置,前提是保证日志保留时间大于数据库备份频率,比如备份是7天一次全备,则expire_logs_days的值应大于7,空间充足情况下一般建议设置为7天或者15天。

设置方法,在参数文件中配置expire_logs_days=7即可在重启MySQL后生效。也可以在MySQL命令行直接设置:

mysql> set global expire_logs_days=7;

在命令行设置不会立即对日志进行清理,需要达到如下几种触发条件之一:

1、binlog大小超过max_binlog_size

2、手动执行flush logs

3、MySQL服务重新启动时

所以如果是MySQL使用过程中命令行设置了该参数,可以使用flush logs切换日志触发清理,此时需要注意清理需要占用服务器I/O资源,应在不影响使用情况下执行。

binlog手动清理维护

1.问题分析

当磁盘空间由于binlog占用空间不足,MySQL服务已经挂起时,需要手动清理binlog日志。处理过的几次问题是管理员在清理binlog时删除了所有的binlog日志,磁盘空间释放后,重启MySQL服务发现启动失败,其原因就是binlog被全部清理后,MySQL服务启动需要写入日志到最新的一个binlog,而其记录的最后一个binlog找不到,所以会报错启动失败。

1、手动清理的正确方法

手动清理binlog日志时,需要保留最新一个日志,保证数据库重启后可以检测到最新的写入日志,确认最后一个日志,可以根据日志名称(序号递增)或者写入时间来确定。

2、删除所有日志后的处理方法

如果已经删除了所有的日志而无法启动数据库,此时可以按照如下方法处理:

在datadir目录下找到mysql-bin.index文件,该文件是记录数据库里的binlog信息,清空该文件内容,重启数据库,此时日志会重置为1号,数据库恢复正常。

表清空操作

1.问题分析

由于数据库里某些日志表太大,影响查询和插入表的效率,有时会做清空表的操作,而管理员维护MySQL数据库时习惯使用图形工具如Navicat,当表的数据比较大时,从图形工具点击清空表,系统会卡住,原因是工具里的情况表是delete的操作,数据库执行时会每条数据进行删除并记录redo,undo日志,占用数据库资源较大导致的数据库hang住。

1、表清空的正确方法

如果确认表数据是不需要的,请使用truncate的方式情况表,效率非常高且占用资源少,SQL语法如下:

mysql> truncate table_name;

MySQL备份

1.问题分析

数据库最重要的就是数据,数据的安全高于一切,而完善的备份是数据安全的最后一道防线,蓝鲸平台是一个企业级的平台,其存储的数据也是至关重要的,所以备份策略必须合理制定。MySQL 最常用的备份方式分为逻辑备份mysqldump,物理备份xtrabackup,当数据量不大,备份时间在1小时内可以完成的,使用mysqldump即可,更大数据量则需要考虑使用xtrabackup,下面主要介绍mysqldump。

2.备份通用性命令

mysqldump是个很灵活的工具,有很多参数可以在备份时使用,不过对于蓝鲸平台的mysql备份,建议使用如下通用的备份命令即可:

mysqldump -uroot -p --all-databases --master-data=2 --flush-logs --single-transaction > /backup/dbfull-date +%F.sql

如果需要压缩备份文件,可以用如下命令:

mysqldump -uroot -p --all-databases --master-data=2 --flush-logs --single-transaction |gzip > dbfull-date +%F.tar.gz

该命令备份所有的数据库,记录备份时binlog的位置(用于建立主从关系的复制起始点或是恢复到指定时间点),以事务的方式备份,不会影响主库运行。

备份如果是在本地磁盘,还需要定期清理备份文件,比如清理30天前的备份文件,如下清理脚本可以参考:

find /backup -mtime +30 -name "dbfull-*.sql" -exec rm -rf {} \;

随着蓝鲸平台在企业级的广泛使用,其存储数据的MySQL数据库应确保数据安全和MySQL服务平稳运行,本文所列举的几个问题都是常见的导致平台无法使用的问题,其处理方法也都是验证过并在生成环境使用的方式,可以作为处理该类问题的参考。

原文地址:https://blog.51cto.com/11811406/2401023

时间: 2024-08-30 15:20:00

蓝鲸平台MySQL数据库管理规范建议的相关文章

Windows客户端C/C++编程规范“建议”——函数

1 函数 1.1 代码行数控制在80行及以内 等级:[要求] 说明:每个函数的代码行数控制应该控制在80行以内.如果超过这个限制函数内部逻辑一般可以拆分.如果试图超过这个标准,请列出理由.但理由不包含如下: 无法拆分. 流程内部逻辑复杂,无需拆分,即使拆分了,拆分的函数也不会被其他地方用到.(解释:拆分可以减少代码行数,提炼后的函数可以方便读者快速理解函数逻辑并定位问题.) 1.2 代码列数控制在100字符及以内 等级:[要求] 说明:每行代码不可以超过100字符.如果超过这个字符数,代码的美观

Windows客户端C/C++编程规范“建议”——前言

前言 工作中接触了很多编程规范.其中最有意思的是,公司最近发布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份规范是由做其他平台开发的同学制定的.那么做Windows开发的人都去哪儿了?后来由于工作需要,项目组需要我制定一份编程规范.这也是我这系列博客的由来.(转载请指明出于breaksoftware的csdn博客) 说到"规范"",可能没多少人喜欢这样的东西.相信很多工程师和我一样,都

笔记整理--Linux平台MYSQL的C语言

Linux平台MYSQL的C语言API全列表 - 第三只眼的专栏 - 博客频道 - CSDN.NET - Google Chrome (2013/8/18 22:28:58) Linux平台MYSQL的C语言API全列表 2013-02-19 15:17 78人阅读 评论(0) 收藏 举报 1.mysql_affected_rows()            //返回上次UPDATE.DELETE或INSERT查询更改/删除/插入的行数. 2.mysql_autocommit()        

老叶观点:MySQL开发规范之我见

大多数MySQL规范在网上也都能找得到相关的分享,在这里要分享的是老叶个人认为比较重要的,或者容易被忽视的,以及容易被混淆的一些地方. 1.默认使用InnoDB引擎[老叶观点]已多次呼吁过了,InnoDB适用于几乎99%的MySQL应用场景,而且在MySQL 5.7的系统表都改成InnoDB了,还有什么理由再死守MyISAM呢. 此外,频繁读写的InnoDB表,一定要使用具有自增/顺序特征的整型作为显式主键. [参考]:[MySQL FAQ]系列 — 为什么InnoDB表要建议用自增列做主键.

WindowsclientC/C++编程规范“建议”——前言

前言 工作中接触了非常多编程规范.当中最有意思的是,公司近期公布了一版C/C++编程规范,然后我看到该规范的最后一段时,有这么一句:"该规范不适用于Windows平台开发".看来这份规范是由做其它平台开发的同学制定的.那么做Windows开发的人都去哪儿了?后来因为工作须要,项目组须要我制定一份编程规范.这也是我这系列博客的由来.(转载请指明出于breaksoftware的csdn博客) 说到"规范"",可能没多少人喜欢这种东西.相信非常多project师

inux平台及windows平台mysql重启方法

各个平台mysql 重启: Linux下重启MySQL的正确方法: 1.通过rpm包安装的MySQL service mysqld restart 2.从源码包安装的MySQL // linux关闭MySQL的命令 $mysql_dir/bin/mysqladmin -uroot -p shutdown // linux启动MySQL的命令 $mysql_dir/bin/mysqld_safe & 其中mysql_dir为MySQL的安装目录,mysqladmin和mysqld_safe位于My

[转载] 根据多年经验整理的《互联网MySQL开发规范》

原文: http://weibo.com/p/2304181380b3f180102vsg5 根据多年经验整理的<互联网MySQL开发规范> 写在前面:无规矩不成方圆.对于刚加入互联网的朋友们,肯定会接触到MySQL,MySQL作为互联网最流行的关系型数据库产品,它有它擅长的地方,也有它不足的短板,针对它的特性,结合互联网大多应用的特点,笔者根据自己多年互联网公司的MySQLDBA经验,现总结出互联网MySQL的一些开发规范,仅供参考. 一.基础规范 (1) 使用INNODB存储引擎 (2) 

MySQL 数据库规范--调优篇(终结篇)

前言 这篇是MySQL 数据库规范的最后一篇--调优篇,旨在提供我们发现系统性能变弱.MySQL系统参数调优,SQL脚本出现问题的精准定位与调优方法. 目录 1.MySQL 调优金字塔理论 2.MySQL 慢查询分析--mysqldumpslow.pt_query_digest工具的使用(SQL脚本层面) 3.选择合适的数据类型 4.去除无用的索引--pt_duplicate_key_checker工具的使用(索引层面) 5.反范式化设计(表结构) 6.垂直水平分表 7.MySQL 重要参数调优

Mysql高性能优化规范建议

原文:Mysql高性能优化规范建议 数据库命令规范 所有数据库对象名称必须使用小写字母并用下划线分割 所有数据库对象名称禁止使用mysql保留关键字(如果表名中包含关键字查询时,需要将其用单引号括起来) 数据库对象的命名要能做到见名识意,并且最后不要超过32个字符 临时库表必须以tmp_为前缀并以日期为后缀,备份表必须以bak_为前缀并以日期(时间戳)为后缀 所有存储相同数据的列名和列类型必须一致(一般作为关联列,如果查询时关联列类型不一致会自动进行数据类型隐式转换,会造成列上的索引失效,导致查