1.
myisam 与 innodb的区别进行总结,并讨论在什么情况下用什么ENGINE!
 
                   MyISAM                   InnoDB 
    事务             不支持                   支持 
    数据行锁定    不支持,只有表锁定          支持 
    外键约束      不支持                      支持 
    表空间大小    相对小                      相对大,最大是2倍 
    全文索引      支持                        不支持 
    GIS数据       支持                        不支持 
    COUNT问题     无                          执行COUNT(*)查询时,速度慢
ENGINE是决定数据库的引擎是myisam或innodb,
 
 
 
2.
创建表,表内的数据由/etc/passwd的内容(name,uid,gid,home directory,bashh)来提供
自动导入进来
 
/etc/init.d/mysqld start  启动mysql
 
#mysql
create database passwd;   创建库
use passwd;    进入库
create table passwd (name char(20) , uid int , gid int , home char(30) , shell char(30));
创建表
exit   
 
cat /etc/passwd   查看 需要的为第1,3,4,6,7列
awk -F : '{print $1, $3, $4, $6, $7}' /etc/passwd > /tmp/passwd
cat /tmp/passwd
此时显示每列之间应该有空格
 
#mysql
use passwd;  进入库
load data inflie '/tmp/passwd' into table passwd fields terminated by '';
 

 
 
3.
使用mydumper,myload进行备份还原,并与mysqldump进行速度比较
seq 1 5000000 > /tmp/bigfile   创建文件bogfile 内容为从 1 到 5000000 seq表示排序
ll -h /tmp/bigfile
-rw-r--r-- 1 root root 52M 01-30 10:12 /tmp/bigfile   文件大小为52M
create database aa;     创建库aa
mysql> use aa;
mysql> create table aa (a int);
mysql> load data infile '/tmp/bigfile' into table aa;
 
mysqldump 方式的测试
time mysqldump -u root -p aa > /tmp/aa.bak  aa库备份到 /tmp/aa.bak
real    0m3.915s
user    0m1.275s
sys     0m0.191s
 
# mysql
drop database aa;  删除aa库
create database aa;  新建一个库 aa
exit
time mysql -u root -p aa < /tmp/aa.bak  从/tmp/aa.bak 还原之前备份的库aa到新建的库aa中
real    0m6.105s
user    0m1.078s
sys     0m0.036s
 
# mysql   进入 查看是否还原成功
use aa;
show tables;
desc aa;
select * from aa;
 
mydumper,myload 方式的测试
 
cmake-2.6.4-7.el5.i386.rpm
mydumper-0.2.3.tar.gz
两个包都放在了/usr/src/下
 
mount /dev/cdrom /mnt
yum install gcc gcc-c++ glib2-devel mysql-devel zlib-devel pcre-devel -y
cd /usr/src
rpm -ivh cmake-2.6.4-7.el5.i386.rpm
tar fvxz mydumper-0.2.3.tar.gz
cd mydumper-0.2.3
cmake .
make && make install
 
mkdir -pv /tmp/sqlbak   创建目录  备份用
 
time mydumper -B aa -u root -o /tmp/sqlbak   备份
real    0m3.303s
user    0m0.882s
sys     0m0.078s
#mysql   进入mysql 将原有库aa删除 建立新的库aa
drop database aa;
create database aa;
exit
time myloader -u root -d /tmp/sqlbak -B aa   还原
real    0m4.284s
user    0m0.515s
sys     0m0.188s
 
通过比较 mydumper myloader 要快 
 
 
 
4.
全备份结合binlog来一个备份实验
 
vim /etc/my.cnf
[mysqld]
log-bin=binlog
log-bin-index=binlog.index
sync_binlog=0
 
service mysqld restart
 
cd /var/lib/mysql/
ls
会多文件
binlog.000001   什么时间对数据库做了什么  只记录变动的(增,删,改) 
binlog.index    记录当前目录下 那些是索引文件
 
#mysql
create database a;   创建库
use a;
create table a (a int);  创建表
insert into a values (1);  插入
insert into a values (2);
insert into a values (3);
select * from a;
+------+
| a    |
+------+
|    1 | 
|    2 | 
|    3 | 
+------+
3 rows in set (0.00 sec)
 
drop table a;   将表a删除
exit
 
mysqlbinlog binlog.000001   查看一下之前的记录 显示从at 175到 at 509 之间为我之前创建表a并
 
为其添加数据的记录
mysqlbinlog --start-position 175 --stop-position 509 binlog.000001 |mysql -u root -p
还原从at 175到 at 509 之间的记录
 
#mysql
use a;
show tables;   查看表a已经回来了
+-------------+
| Tables_in_a |
+-------------+
| a           | 
+-------------+
1 row in set (0.00 sec)
 
mysql> select *from a;  表a中的数据也都还原了
+------+
| a    |
+------+
|    1 | 
|    2 | 
|    3 | 
+------+
3 rows in set (0.00 sec)
 
 
 
任务计划
vim  /etc/crontab  添加
*/1 * * * * root mysql -u root -p -e 'flush logs;'
每分钟一次
cd /var/lib/mysql/
ls
会发现binlog.000001 binlog.000002 ....binlog.00000n 每分钟都会增加一个
 
 
5.
数据库的大小,备份速度和什么相关
 
对于一个数据库完整备份来说,备份的速度很大程度上取决于下面两个因素:读磁盘数据、日志文件的吞吐量,写磁盘数据文件的吞吐量。
读吞吐量的大小取决于磁盘读取数据的速度,而磁盘读取的速度又取决于数据文件在磁盘中的位置。因此,位于不同盘符上不同数据库文件的读取速度都不相同。
提高读吞吐量:
使用更快的磁盘。
把多个数据库文件存储在不同的物理磁盘上
减少数据库文件碎片级别
 
提高写吞吐量:
使用更快的磁盘进行备份
把备份文件分割成多个文件(在相同或不同的物理磁盘上,这取决于磁盘的吞吐量)
使用备份压缩工具。假如压缩速度非常好的话,那么就会减少写到磁盘上的数据量,从而加大写吞吐量。一般情况执行这种压缩程序都会消耗大量的CPU资源