2013年5月4日星期六

MySQL提供了主从复制的功能(有见地)

MySQL提供了主从复制的功能,作用类似Oracle的dataguard,但是配置和管理远比dataguard简单,没有所谓的物理备库和逻辑备库之分,也没有提供相应的数据保护模式,只有master和slave数据库角色,这种架构广泛应用于各大门户,游戏网站中,提供数据库的读写分离功能;相比之下oracle的读写功能到了11g版本才能借助active dataguard完美实现,否则就只能用logical standby,但又有许多的数据类型和操作不被逻辑备库支持!

mysql 5.5主从复制配置

  1.主库编辑my.cnf:
[mysqld]
log-bin=NEW_NAME
server-id=1     #配一个唯一的ID编号,1至32。
#设置要进行或不要进行主从复制的数据库名,同时也要在 Slave 上设定。
binlog-do-db=数据库名1
binlog-do-db=数据库名2
binlog-ignore-db=数据库名1
binlog-ignore-db=数据库名2
mysql> grant replication slave on *.* to slaveuser@192.168.1.101 identified by '123456' ;
mysql> flush privileges;
mysql> show master status;
+------------------+----------+--------------+------------------+
| File             | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000008 |      337 |              |                  |
+------------------+----------+--------------+------------------+
记录下二进制日志文件名和位置
2.从库编辑my.cnf,把server-id改成不和主机相同的数字。如果只想同步指定的数据库,可以添加  replicate-do-db = yourdatabase,
同步几个就复制几个,把数据库名改了就好。
[mysqld]
server-id=2     #唯一
#设置要进行或不要进行主从复制的数据库名,同时也要在 Master 上设定。
replicate-do-db=数据库名1
replicate-do-db=数据库名2
replicate-ignore-db=数据库名1
replicate-ignore-db=数据库名2
mysql> change master to master_host='192.168.1.100',master_user='slaveuser',master_password='123456', master_log_file='mysql-bin.000008',master_log_pos=337; 
mysql> start slave;
mysql> show slave status\G;
如果出现: 
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
以上两项都为Yes,那说明没问题了。如果指定了个别的数据库,还可以看到

注:如果出现Slave_SQL_Running:connecting的现象,首先在从库命令行下输入:
#mysql -uslaveuser -h 192.168.1.100 -p123456
看是否能登入mysql,如果是拒绝等提示,那要查看主机上的第从库授权操作是否用户的权限等设置正确。
如果开始的环境不是主从架构,跑了一段时间已经有了数据,这时候要先在主机上加锁:flush tables with read lock;
打包主机的数据目录: #tar zcf  /tmpdatabak.tgz /opt/data,拷贝这个压缩包到从机,解压后,做主从的配置。
然后解锁:unlock tables;

MySQL中MyISAM与InnoDB的区别



    show table status; 

    查看表采用何种引擎。

    MySQL Administrator建数据库的时候,表缺省是InnoDB类型。原来是MyISAM类型不支持事务处理等高级处理,而InnoDB类型支持。
     MyISAM类型的表强调的是性能,其执行数度比InnoDB类型更快,但是不提供事务支持,而InnoDB提供事务支持以及外部键等高级数据库功能。这样就可以根据数据表不同的用处是用不同的存储类型。

    另外,MyISAM类型的二进制数据文件可以在不同操作系统中迁移。也就是可以直接从Windows系统拷贝到linux系统中使用。
--------------------------------------------------------------
    mysql数据库中最常使用的两种表类型为 innodb和myisam。这两种类型各有优缺点,视具体应用而定。
    InnoDB 给 MySQL 提供了具有事务(commit)、回滚(rollback)和崩溃修复能力(crash recovery capabilities)的事务安全(transaction-safe (ACID compliant))型表。
    InnoDB 提供了行锁(locking on row level),提供与 Oracle 类型一致的不加锁读取(non-locking read in SELECTs)。这些特性均提高了多用户并发操作的性能表现。  
    在InnoDB表中不需要扩大锁定(lock escalation),因为 InnoDB 的列锁定(row level locks)适宜非常小的空间。
    InnoDB 是 MySQL 上第一个提供外键约束(FOREIGN KEY constraints)的表引擎。
    InnoDB 的设计目标是处理大容量数据库系统,它的 CPU 利用率是其它基于磁盘的关系数据库引擎所不能比的。
    在技术上,InnoDB 是一套放在 MySQL 后台的完整数据库系统,InnoDB 在主内存中建立其专用的缓冲池用于高速缓冲数据和索引。
     InnoDB 把数据和索引存放在表空间里,可能包含多个文件,这与其它的不一样,举例来说,在 MyISAM 中,表被存放在单独的文件中。
     InnoDB 表的大小只受限于操作系统的文件大小,一般为 2 GB。
     InnoDB所有的表都保存在同一个数据文件 ibdata1 中(也可能是多个文件,或者是独立的表空间文件), 相对来说比较不好备份,免费的方案可以是拷贝数据文件、备份 binlog,或者用 mysqldump。 

2013年5月3日星期五

centos下 mysql 5.5 数据库主从配置(测试成功!)

主服务器设定为:'192.168.1.253',前提是主从服务器都正确安装完毕,centos操作系统.
一、主数据库配置
 1、编辑/etc/my.cnf 主数据库配置文件。
server-id = 1
#需要进行复制的数据库
binlog-do-db = mydatabase
#不需要进行复制的数据库
replicate-ignore-db = mysql
#生成的同步数据所需要的文件
log-bin=syslog

2、重启mysql,登陆Mysql,设置从数据库所需要的权限,设置为可以从任何机器登陆,账号/密码:slave/123456
grant replication slave,reload,super on *.* to 'slave'@'%' identified by '123456';

3、查看状态
show master status;

二、从数据库配置
1、编辑/etc/my.cnf 从数据库配置文件。
由于Mysql版本从5.1.7以后开始就不支持“master-host”类似的参数,用配置文件设置主从同步时,出现:mysqld: unknown variable 'master-host=127.0.0.1'
#将配置文件中的server-id该为2
server-id = 2
#需要进行同步的数据库名称
replicate-do-db = mydatabase
2、重启mysql,登陆Mysql,设置同步设置,其中syslog.000001为日志文件,master_log_pos=0为日志开始复制的位置,即:从syslog.000001的0位置同步数据,日志文件和行号根据实际情况进行处理。
change master to master_host='192.168.1.253',master_user='slave',master_password='123456',master_log_file='syslog.000001',master_log_pos=0;
3、启动从数据库数据同步命令:
   start slave;
4、查看从数据库同步状态,Slave_IO_Status,Slave_Io_Running,Slave_SQL_Running
  show slave status;
5、需要重新进行同步的时候,先停止同步服务器,重新设置,同步的日志文件master_log_file和同步起始位置master_log_pos:
   stop slave;

Mysql错误Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist



数据库运行一段时间出现如下错误:Fatal error: Can’t open and lock privilege tables: Table ‘mysql.host’ doesn’t exist ,这到底是为什么呢?我们该怎么样解决呢

解决办法如下:不过数据丢了 气愤。。。。。。。。。。。。。。。。。。
进入mysql应用目录,cd /usr/local/mysql ;l然后执行./bin/mysql_install_db –usrer=mysql datadir=/var/lib/mysql 这个是我的datadir目录,你可以去/etc/my.cnf里面查找就ok了!最后启动mysql

/usr/local/mysql/bin/mysqld_safe –user=mysql& 然后登陆数据库,如果提示/tmp/mysql.sock错误的话,就重新链接一下mysql.sock文件即可。链接命令如下:
ln -s /var/lib/mysql/mysql.sock /tmp/ 这样就可以登陆数据库了
如果是yum安装或是rpm安装的包,则需要完全卸载,然后在安装,重启就ok了!

yum remove mysql*

MySQL Daemon failed to start


  一般MYSQL不能正常启动的时候,需要查看下日志文件:
tail /var/log/mysqld.log 显示所有日志
tail -n 20 /var/log/mysqld.log 显示最近的20条日志
根据日志情况,具体分析处理,一般是
mysql 数据库的权限问题:chmod 777 -r /var/lib/mysql;
注意数据库用户:chown -R mysql:mysql /var/lib/mysql

2013年5月2日星期四

专家:有日本间谍混入救援队参加汶川救援(哎,日本啊)



核心提示:据深圳卫视报道,在国际救援中,常常会出现受灾国不愿接受国际救援的情况,救援队甚至被当做间谍对待。就是日本救援队所携带的机具,除了救灾机具,他们还带了测绘的器材,其用意已经超过救灾。
  据深圳卫视报道,在国际救援中,常常会出现受灾国不愿接受国际救援的情况,救援队甚至被当做间谍对待。

  台北专家称,五年前的汶川地震当中,日本救援队从组成成员到携带的工具都引发联想。日本第一批救援队是31个人,其组成包括日本外务省国际情报局的人,还有海上防卫厅的人,这些人员的身份不得不引起猜疑。

  其次,就是日本救援队所携带的机具,除了救灾机具,他们还带了测绘的器材,其用意已经超过救灾。虽然在救援中,中方会统一管制,但这种时刻显然是好的机会做情搜。
来源:http://news.cntv.cn/2013/05/02/VIDE1367452083036134.shtml