文章内容中介绍的MySQL数据库服务器初始化步骤,是作者曾经在呆过的某著名电子商务公司的工作中,摸索而总结的服务器初始化步骤,不过是根据遗留的部分内容,外加回忆而重新整理成文章,供大家工作中参考。
风险性操作命令被强迫隐含重改写
1) Shell命令rm:不管你输入的rm 后面为何参数,都会隐形地转为 rm –i 命令执行;
2) Shell命令cp:不管你输入的cp 后面为何参数,都会隐形地转为 cp –i 命令执行;
3) Shell命令mv:不管你输入的mv后面为何参数,都会隐形地转为 mv –i 命令执行;
修改每个操作系统级别帐号默认配置的隐藏文件bash_profile的内容,实现上述3个命令的隐形修改,同时也可能增加路径和提示等其他信息,具体的详细信息可以参考文章设置Linux系统的环境变量方式,减少悲剧操作的发生。
服务器名称
主机名称要能包含三部分信息:服务器所在的机房名称、应用名称、集群中的代号。另外,为方便统一管理,与其他兄弟部门交流和合作,改变过去自成章法的做法,而制定严格的格式要求,三部分的连接符合统一为中划线“-”,举例说明:xy-brmms-db1a、xy-brmms-db1b、xy-brmms-db2a、xy-brmms-db2b….
其中,db1a和db1b表示一对互为主备的主从复制关系,集群中有多台服务器支持数据服务,则最后二位的数字和字母会相应变化而体现出来。
ITIL流程单提交
1) 域名申请:若应用程序访问数据库服务器的方式,是通过域名而非IP地址的时候,则需要提交ITIL流程单,并且指定为SA部门的***同事,一般会在2个小时内处理,故需要提前申请准备好;
2) 服务器的IP地址变更:若想更改数据库服务器的IP地址,包含做VIP用处的IP地址,则需要提交ITIL流程单,并且指定为网络部门的***同事,此需求一般会及时响应,但依然建议提前填写;
3) 服务器访问安全列表增加:待服务器所有的配置工作都完成之后,通过向安全部门提交ITIL流程单方式,要求描述清楚:服务器的IP地址信息(备注:需要用到VIP或域名的,也需要一并描述清楚),主机的名称,那个组的成员或个人需要访问此服务器,并且描述清楚各自需要拥有的权限,以及默认登录的帐号名称(一般默认为:admin);
MySQL软件包安装
鉴于我们使用MySQL开源软件的社区版本产品,其测试和验证过程主要依赖社区的用户和开源贡献者完成,即使商业产品也不能盲目使用最新发布的版本,另外使用的版本必须经过我们做过一定量针对性的测试,以及开发环境或性能测试环境验证过,为此推荐使用版本:5.1.34、5.1.36、5.1.40,若是想使用Plugin-innodb,则推荐使用版本:mysql-5.1.48,暂不推荐生产环境使用版本:mysql 5.5.*系列。
以mysql 5.1.40版本为例,安装的软件包为:
MySQL-server-community-5.1.40-0.rhel5.x86_64.rpm MySQL-shared-community-5.1.40-0.rhel5.x86_64.rpm MySQL-client-community-5.1.40-0.rhel5.x86_64.rpm MySQL-devel-community-5.1.40-0.rhel5.x86_64.rpm |
MySQL数据库的初始化
1) 主备服务器都优先增加用于复制的帐
GRANT REPLICATION SLAVE ON *.* TO ‘repl’@’%’ IDENTIFIED BY’XXXXXXXXXXXXXXXXXX’; |
2) 待主主复制搭建完成后,任选一台主机执行其他初始化操作
初始化root帐号的信息:
DELETE FROM mysql.user WHERE user=” OR host=”; UPDATE mysql.user SET password=PASSWORD(‘XXXXXXXXXXXXXXXX’) WHERE user=’root’; FLUSH PRIVILEGES; |
创建用于监控的数据库信息:
CREATE DATABASE `monitor` CHARACTER SET utf8 COLLATE utf8_general_ci; USE monitor; CREATE TABLE `xdual` ( `id` int(11) NOT NULL AUTO_INCREMENT, `x` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) ) ENGINE=InnoDB AUTO_INCREMENT=1 DEFAULT CHARSET=utf8 COLLATE=utf8_general_ci; INSERT INTO xdual(x) VALUES(NOW()); |
创建用于管理、监控和本地备份的帐号信息:
GRANT SUPER,PROCESS,FILE,SELECT ON *.* TO ‘admin’@’localhost’ IDENTIFIED BY’XXXXXXXXXXXXXXXXX’; GRANT UPDATE ON monitor.* TO ‘admin’@’localhost’; |
创建用于只读应用场景的帐号(比如:数据仓库):
ANT SELECT ON stanley.* TO ‘rnd’@’%’ IDENTIFIED BY’XXXXXXXXXXXXXXXX’; |
增加应用程序和DBA操作对应库的帐号信息:
GRANT SELECT,INSERT,UPDATE,DELETE ON stanley.* TO ‘stanley’@’%’ IDENTIFIED BY’XXXXXXXX’; GRANT ALL ON stanley.* TO ‘stanley’@’localhost’ IDENTIFIED BY’XXXXXXXXXXXXXXXX’; |
备注:
DBA人员访问mysql数据库服务器完成具体工作时,必须尽量使用对应权限的帐号,而不能一味使用最高权限帐号root,虽然此举可能带来成本上升,却可以减少误操作事件的发生概率,以及降低误操作影响范围。
MySQL复制搭建
因新安装的数据库服务器,还未跑任何应用,只是2台主机都创建了一个一样属性的数据库帐号信息而已,为此没有必要执行数据库备份的方式用于搭建复制,简单描述如下(备注:以xy-brmms-db1a和xy-brmms-db1b为例):
(1) 主机xy-brmms-db1a上执行SQL命令:SHOW MASTER STATUS;
(2) 主机xy-brmms-db1b上执行SQL命令:
CHANGE MASTER TO master_host=’172.22.32.88′,master_user=’repl’,master_password=’XXXXXXXXXXXXXXXX’, master_log_file=’mysql-bin.000006′,master_log_pos=2256; START SLAVE; |
(3) 主机xy-brmms-db1b上执行SQL命令:SHOW SLAVE STATUS;根据输出信息判断是否xy-brmms-db1a->xy-brmms-db1b方向的复制是否成功;
(4) 通过上述3个步骤完成xy-brmms-db1a->xy-brmms-db1b的复制,接下来重复上述3个步骤,替换相关信息,能完成xy-brmms-db1b->xy-brmms-db1a的复制;
备注:
MySQL生产环境可能碰到的场景,需要搭建复制的步骤及详细方法,可以参考文章生产环境搭建MySQL复制的教程。
操作系统需要增加的帐号
根据实际访问及应用的需要,服务器操作系统访问的帐号,每台主机上有 3-5个帐号,并且每个帐号都会有其独自对应的密码。对于一个应用集群中,所有数据库服务器的帐号密码都相同,其他情况下不同服务器操作系统中的帐号名称相同,但是密码肯定不同。
为了避免用户和组ID的混乱,对用户名称的id和用户所属组id进行统一的规定:
admin用户的uid 必须为:501
admin用户组的gid 必须为:501
对应shell命令为:
groupadd -g 501 admin useradd -c “dragoon and other software owner” -g admin -u 501 admin |
mysql用户的uid 必须为:601
mysql用户组的gid 必须为:601
对应shell命令为:
groupadd -g 601 mysql useradd -c “mysql software owner” -g mysql -u 601 mysql |
备注:
使用nagios作为监控手段的情况下,还会创建一个名称为nagios,群组名为nagios,ID号同为401的用户及用户组,另外还有一些其他的帐号,都是类似的方式。
监控配置
为了加快部署的速度,以及部署工作的简易,Dragoon系统设计之初就希望做到不需要修改任何操作脚本,只需要创建必要的目录,并且把所有通用性的脚本当到对应目录下,然后启动agent程序即可完成主机信息的自动注册,然后通过操作界面完成即可。
我们特意通过一台公用型的服务器搭建了监控样机,放置了通用性的脚本程序及文件,可以从此服务器上scp文件到需要的主机上,监控配置界面也可以勾选模版为此服务器,即可轻易完成监控配置的整个过程。
创建用于存放mysql访问帐号配置信息:
mkdir -p /home/mysql/admin/conf/ |
创建监控帐号帐号文件:
vi /home/mysql/admin/conf/.dragoon_mysql_ps.conf |
向文件增加如下内容:
#dragoon connect to mysql’s user and password USER=admin PASS=XXXXXXXXXXXXXXXX SOCKET=/data/mysqldata/sock/mysql.sock |
最后修改文件目录及属性:
chown -R mysql:mysql /home/mysql/ |
创建用于存放通用性及文件的目录:
mkdir -p /usr/alisys/dragoon mkdir /usr/alisys/dragoon/bin mkdir /usr/alisys/dragoon/libexec mkdir /usr/alisys/dragoon/var mkdir -p /home/ops/appops/noc/log mkdir -p /home/ops/appops/noc/tmp |
最后修改目录及文件属性:
chown -R admin:admin /home/ops |
从Linux环境监控样机上拷贝相关脚本及文件:
scp root@172.22.7.155:/usr/alisys/dragoon/bin/* /usr/alisys/dragoon/bin/ scp root@172.22.7.155:/usr/alisys/dragoon/libexec/* /usr/alisys/dragoon/libexec/ scp root@172.22.7.155:/usr/alisys/dragoon/DragoonInit /usr/alisys/dragoon/DragoonInit scp root@172.22.7.155:/usr/alisys/dragoon/dragoon_operate_alert.sh /usr/alisys/dragoon/dragoon_operate_alert.sh |
增加系统启动项:
cp /usr/alisys/dragoon/DragoonInit /etc/rc.d/init.d/DragoonAgent chkconfig –add DragoonAgent #(chkconfig –list DragoonAgent 检查是否正常添加) |
监控服务启动命令:
/etc/init.d/DragoonAgent start OR /etc/init.d/DragoonAgent restart |
监控服务关闭命令:
/etc/init.d/DragoonAgent stop |
完成主机上所有监控配置及启动agent程序的操作之后,接下来可以到Dragoon系统网站页面,搜索主机名称即可找到,并且修改相关属性,比如所属的群组等,并且选中模版监控机,还可以再增加新的监控项目,最后点击确定即完成所有的配置过程,系统将开始按规则采集相关数据。
【总结】
非采用数据层中间件的数据库服务器,主要是借助MySQL主主复制,以及加上Heartbeat提供的VIP服务实现数据服务的高可用性,当时主要使用**版本,而最新的版本跟其差别甚大,以及介绍起来文章篇幅过长,故未涉及,后续再单独介绍Heartbeat的安装、配置和维护。
Dragoon监控平台未正式上线之前,我们一直使用nagios作为监控报警的工具,mrtg实现服务器及数据库的性能数据展示,以及有非常多的脚本需要用到及配置,比如logwatch用于监控主机上产生的日志信息,然后及时邮件和短信的方式报警。
我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。
我原创,你原创,我们的内容世界才会更加精彩!
【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】
微信公众号
TechTarget
官方微博
TechTarget中国
作者
相关推荐
-
Azure数据湖分析从U-SQL中获得提升
大数据的发展已经让许多精通SQL的数据专业人员不知所措。微软的U-SQL编程语言试图让这些人回归数据查询游戏。
-
TT百科:SQL(结构化查询语言)
一般来说,SQL-on-Hadoop仍是一项新兴技术,但随着各个公司寻求获得拥有大数据应用程序编程SQL技能的开发和分析人员,它们正逐渐成为Hadoop部署的固定组件。
-
SQL和NoSQL数据库设计之争
企业收集了很多大规模增长的松散结构化数据,Hadoop,Spark以及其他新技术处理这些数据非常有助于改善商业智能分析效率。
-
如何通过格式良好的SQL提高效率和准确性
格式良好的SQL并不会比乱七八糟的SQL运行效果更好。数据库其实不怎么关心SQL语句中你把逗号放到了字段名的前面还是后面。