一、某公司为了某项目的需要,准备了两台服务器,配置相同:内存8G3500G SCSI硬盘;计划基于此构建一个主从结构的mysql,提供mydbsampledb两个数据库(公司预测,5年内数据量最多会发展为100G上下),并希望满足以下要求:
1、为了避免单个磁盘损坏导致业务中断,公司计划制作一个软RAID1来存话数据文件;
2、公司期望能利用LVM的快照功能实现相关数据的物理备份,LVM的挂载路径为/mydata,数据目录为/mydata/data
3、另有一个LVM卷,挂载至/binlogs目录,设置主从服务器的二进制日志均位于各自服务器上/binlogs目录;
4、从服务器要防止进行任何写入操作;
5、公司另有一台配置略低的服务器,计划使用此机对两台Mysql服务器的工作状态进行监控,期望能结合nagios的强大报警功能和cacti良好的绘图功能进行;
请根据以上要求绘制拓扑图,并给出实现过程;
注意:  1、实际制作过程中,把所规划磁盘空间大小降低100倍进行,比如计划使用300G的空间,实际制作中只需要有3G就好;内存大小则根据自己机器的能力进行调整;IP地址要使用自己网段内的123三个;
2mysql软件使用5.5系列最新的版本5.5.15;同时,在生产环境中,一定要使用64位的操作系统,尤其是当服务器内存大于4G时;但对于我们此处的实现,则可忽略此要求;
MsSQL试题看大家会做吗?留下你的答案_linux答案
二、初始化数据库,并完成以下各项测试(注意,所有相关的写操作均要求在从服务器上保持一致)
 一)测试数据库和表的创建,并导入数据:
1、从服务器只复制mysqlmydbsampledb两个数据库;
2sampledb的默认字符集为gbk
3、创建表mydb.dnsrecords,比照mytb.jpg图片中的字段的定义;
4、将table.sql中的数据导入至此表;使用如下命令(假设新建的表名为dnsrecords,原数据文件为/tmp/table.sql)
MsSQL试题看大家会做吗?留下你的答案_linux答案
二)
1、显示dnsrecords表中Hostmail并且View"Def"结尾的所有行;
2、显示dnsrecords表中ZoneHostTypeData字段,但只显示第50行后100行;;
3、将第2题中的Data字段显示时的Data改为显示Value,且去除重复出现的行;
4、显示dnsrecords表中Hostftp的所有行的ZoneHostTypeData字段;
5、显示dnsrecords表中Zone为以.cc结尾或以.net结尾的所有行;
6、显示dnsrecords表中Host字段的值为mail,@,*oa的所有行;
7、以Host字段为准对dnsrecords表中的数据进行分组,并对分组后的结果进行行数统计;而后显示统计结果中行数不小于5的组;
8、显示dnsrecords表中Mx_priority不为空的行,并对其结果以zone字段为准进行升序排序;
9、显示dnsrecords表中存在的所有域名;
10、显示dnsrecords表中存在的所有记录类型;
MsSQL试题看大家会做吗?留下你的答案_linux答案
三)
1、为dnsrecords表创建视图records,要求只保留显示IDzonehosttypeMx_prioritydata字段;
2、为新建的视图创建在hosttype字段上创建默认索引;
3、为data字段创建hash索引;
MsSQL试题看大家会做吗?留下你的答案_linux答案
四)
1、改变dnsrecords的存储引擎为innodb
2、设置mysql的事务隔离级别为READ COMMITED;同时显式启动两个事务AB,以A事务向dnsrecords中删除一行,查看B事务是否觉察到此改变;而后A事务提交后再使用B事务查看是否能看到相应的改变,而后提交B事务;
3、启动两个mysql客户端MN;在M上对dnsrecords启动显式读锁,并执行一个SELECT语句;接着在N上往dnsrecords中插入一个新行;而后在M客户端释放施加的读锁;
MsSQL试题看大家会做吗?留下你的答案_linux答案
五)
1、设定mysqlinnodb的数据目录为/mydata/innodata,并设定其文件为ibdata01ibdata02,其中ibdata01初始大小为50M,不能自动增长;ibdata02初始大小为10M,可以自动增长;
提示:使用类似innodb_data_file_path = /ibdata/ibdata1:50M;/disk2/ibdata2:50M:autoextend的方法;
2、设定mysqlinnodb的日志文件组目录为/mydata/innodata/translogs(提示:通过innodb_log_group_home_dir设定),日志组中共有2个日志文件(innodb_log_files_in_group),每个日志文件大小为20M
3、设置innodb日志和数据缓冲的大小为32M
要求:以上修改重启mysqld以后有效;而后验正此些设置在从服务器上是否会生效;
MsSQL试题看大家会做吗?留下你的答案_linux答案
六)
按要求创建如下用户:
1、用户vikram,具有在mydb数据库上执行创建和删除tb_test表的权限;可来自任意主机;
2、用户gentoo,具有在dnsrecords表中查询Name字段中数据的权限;此用户账号只能同时连入服务器1次;可来自任意主机;
3、用户centos,具有在dnsrecords表中查询、插入和修改数据的权限;此用户每小时只能发起50次修改操作,且可以把自己获得的权限授予其他用户;可来自任意主机;
MsSQL试题看大家会做吗?留下你的答案_linux答案
七)写一个脚本lgbackup.sh,满足如下要求:
前提:备份文件存放位置为/mybackup
脚本可以接受两个选项:-f-d(f选项和d选项不能同时使用)
   -f:对数据库服务器上的所有数据库做一次完全逻辑备份;备份文件要压缩存放,且文件名保留备份时的日期时间信息;
   -d:对数据库服务器上的所有数据库做一次自上次完全备份以来的差异备份;(提示:或许借助于辅助性的信息文件保存上次完全备份时二进制日志文件的位置)
                    备份文件要压缩存放,且文件名保留备份时的时间信息;
                    每天的差异备份要保存为一个目录,目录名为当天的日期;
                    每天的差异备份目录只保存三天;
MsSQL试题看大家会做吗?留下你的答案_linux答案
八)按要求完成如下操作:   
1、创建一个用户testuser,具有对mydb数据库访问的所有权限;
2、使用上面的脚本lgbackup.shmydb库做一次完全逻辑备份;
3、在mydb库中创建test表,要求具有以下字段:
           ID,自动增长,TINYINT类型;
           ZONE,变长字符型,非空;
           USER,变长字符型,非空;
           REGISTERDATE,日期型;
4、往test表中插入如下数据:
          'a.com'  'Ou Yangfeng'  2011-03-08
          'b.net' 'Huo Yuanjia'  2010-04-30
          'c.cc' 'Si Mayi'  2011-05-07
5、对第3步和第4步中新执行的操作做一次lgbackup.sh的差异备份;(记录二进制日志中事件的位置)
6、删除dnsrecords表中以ZONE字段以.net结尾的记录;而后创建一个对mydb数据库具有所有权限的用户myuser
7、对第6步中新执行的操作做一次lgbackup.sh的差异备份;
8、删除数据库mydb
9、恢复完全备份的mydb;恢复完成后查看是否有myuser用户;
10、恢复完全备份后的所有操作;完成后查看是否有test表、表中是否有数据、dnsrecords表中ZONE字段以.net结尾的行是否已经被删除、myuser是否存在。
 
MsSQL试题看大家会做吗?留下你的答案_linux答案
九)写一个脚本pybackup.sh满足如下要求:
1、脚本可以接受三个选项:-f-d-i(选项不能同时使用)
   -f:对数据库服务器上的所有数据库做一次完全物理备份;备份文件要归档存放,且文件名保留备份时的日期时间信息;
   -i:对数据库服务器上的所有数据库做一次自上次完全备份以来的增量备份;(提示:或许借助于辅助性的信息文件保存上次完全备份时二进制日志文件的位置)
                    备份文件要压缩存放,且文件名保留备份时的时间信息;
                    每天的增量备份要保存为一个目录,目录名为当天的日期;
                    每天的增量备份目录只保存11天;
   -d:对数据库服务器上的所有数据库做一次自上次完全备份以来的差异备份;(提示:或许借助于辅助性的信息文件保存上次完全备份时二进制日志文件的位置)
                    差异备份时手动滚动一下二进制日志,并通过复制此前尚未复制的二进制文件的方式进行备份;
MsSQL试题看大家会做吗?留下你的答案_linux答案
十)按要求完成如下操作(前提:请确保你的数据文件目录位于逻辑卷上,且如果使用Innodb引擎,数据文件、表空间文件和事务日志文件要在同一个卷上):
1、使用pybackup.sh脚本对mysql服务器的数据文件目录除二进制日志文件外的所有文件做一次物理的完全备份;
2、手动删除mydbtest表中REGISTERDATE时间在2011-01-01之前的行;
3、创建数据库testdb
4、创建表testdb.course,字段定义如下:
           ID,自动增长,TINYINT类型;
           ZONE,变长字符型,非空;
           AUTHOR,变长字符型,非空;  
而后自己插入几行数据;
5、使用pybackup.sh脚本增量备份功能备份上面新生成的数据;
6、模拟数据库服务器损坏,并恢复数据至第4步操作产生的所有内容;
MsSQL试题看大家会做吗?留下你的答案_linux答案
 
四、完成以下任务,如果确保无误,则可以将此交付公司使用了:
1、验正主从数据库中的mysqlmydbsampledb的数据是否保持了完全一致;
2、以物理备份的形式,设置服务器每月做一次完全备份,每5天做一次差异备份,每1个小时做一次增量备份;
 我爱linux交流论坛http://51linux.5d6d.com