Chinaunix首页 | 论坛 | 博客
  • 博客访问: 24981
  • 博文数量: 4
  • 博客积分: 301
  • 博客等级: 二等列兵
  • 技术积分: 45
  • 用 户 组: 普通用户
  • 注册时间: 2010-07-13 14:16
文章分类

全部博文(4)

文章存档

2011年(4)

我的朋友

分类: Mysql/postgreSQL

2011-05-08 20:10:03

syncy(master-slave)

Created Tuesday 03 May 2011

1.修改主的mysql配置文件

vi /etc/my.cnf
server-id = 1
log-bin=mysql-bin
binlog-do-db=ccdb

2. 主库配置对备库的同步权限

mysql> GRANT REPLICATION SLAVE ON *.* TO 'ccdbuser'@'%' IDENTIFIED BY 'password';

3. 给主库表加锁,同时记录主库的同步状态

FLUSH TABLES WITH READ LOCK;

mysql> show master status;
+------------------+----------+--------------+------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+------------------+----------+--------------+------------------+
| mysql-bin.000003 | 98 | ccdb | |
+------------------+----------+--------------+------------------+
1 row in set (0.00 sec)

4. 把主库数据文件导出
mysqldump -u root -p ccdb >ccdb0503.sql

5. 把打包的数据文件同步到备库并导入数据库

scp
mysql -u root -p dbcurr< ccdb0503.sql
6. 给主库表解锁
UNLOCK TABLES;
7. 配置备库

my.cnf 添加
server-id=3
master-host=192.168.9.123
master-user=ccdbuser
master-password=password
master-connect-retry=60
master-port=3306
replicate-do-db=ccdb
修改备库master
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000003 ';

8.启动同步
mysql> start slave;
或者slave start/stop;

其他一些命令:mysql> show slave status\G 查看slave状态
mysql> stop slave; 停掉slave

9.其他信息记录

主 配置文件
Binlog_Ignore_DB=test 不同步的数据库
从 配置文件
replicate-do-db=test (所需同步的数据库名,如果是同步多个数据库,可以另起一行如 replicate-do-db=test1)
#replicate-do-table=test.stu (如果只需同步test数据库中的stu表)
#replicate-do-table=test.teacher(如果只需同步test数据库中的stu表)

10.遇到问题及解决办法


有时候会有一个错误,而导致同步停止,无法继续;show slave status\G;显示Last_Error。
此时可以:stop slave; set global sql_slave_skip_counter=1; slave start 忽略一条错误,后继续同步。(有可能导致数据不一致,需要对报错表进行处理)
set global sql_slave_skip_counter=n 忽略n条错误语句。

a)

Slave I/O thread 起不起来
slave状态:waiting to reconnect after a failed master event read

修改同步用户权限为:REPLICATION SLAVE 后重启mysqlOK

b)

主: php 5.3.2 mysql 5.1.43
从: php 5.3.6 mysql 5.5.12
从配置如下选项后mysql起不起来
master-host=192.168.1.242
master-user=guest
master-password=guest
master-connect-retry=60
master-port=3306
日志报错:mysqld_safe mysqld from pid file /var/run/mysqld/mysqld.pid ended
去除上面配置后OK,原因不明。(配置以上信息,进入mysql后用change master to 来实现)

c)

同步过程错误日志:cannot add or update a child row:a foreign key constraint fails ……
原因:表有外键关联,所以两个表的某值都不能更新
处理办法: 手动同步单条数据后OK


 

11.各种状态信息

Master 同步线程状态
  以下列出了master的 Binlog Dump 线程 State 字段中最常见的几种状态。如果在master上没有 Binlog Dump 线程,那么同步就没有在运行。也就是说,没有slave连接上来。

  Sending binlog event to slave

  事件是由二进制日志构成,一个事件通常由更新语句加上其他信息。线程读取到一个事件并正发送到slave上。

  Finished reading one binlog; switching to next binlog

  读取完了一个二进制日志,正切换到下一个。

  Has sent all binlog to slave; waiting for binlog to be updated

  已经读取完全部未完成更新日志,并且全部都发送到slave了。它处于空闲状态,正等待在master上执行新的更新操作以在二进制日志中产生新的事件,然后读取它们。

  Waiting to finalize termination

  当前线程停止了,这个时间很短

 Slave的I/O线程状态

  以下列出了slave的I/O线程 State 字段中最常见的几种状态。从MySQL 4.1.1开始,这个状态在执行 SHOW SLAVE STATUS 语句结果的 Slave_IO_State 字段也会出现。这意味

着可以只执行 SHOW SLAVE STATUS 语句就能了解到更多的信息。

  Connecting to master

  该线程证尝试连接到master上。

  Checking master version

  确定连接到master后出现的一个短暂的状态。

  Registering slave on master

  确定连接到master后出现的一个短暂的状态。

  Requesting binlog dump

  确定连接到master后出现的一个短暂的状态。该线程向master发送一个请求,告诉它要请求的二进制文件以及开始位置。

  Waiting to reconnect after a failed binlog dump request

  如果二进制日志转储(binary log dump)请求失败了(由于连接断开),该线程在休眠时进入这个状态,并定期重连。重连的时间间隔由

  --master-connect-retry 选项来指定。

  Reconnecting after a failed binlog dump request

  该线程正尝试重连到master。

  Waiting for master to send event

  已经连接到master,正等待它发送二进制日志。如果master闲置时,这个状态可能会持续较长时间,如果它等待超过 slave_read_timeout 秒,就会发生超时。这时,它就会

考虑断开连接,然后尝试重连。

  Queueing master event to the relay log

  已经读取到一个事件,正把它拷贝到中继日志中以备SQL线程处理。

  Waiting to reconnect after a failed master event read

  读日志时发生错误(由于连接断开)。该线程在重连之前休眠 master-connect-retry 秒。

  Reconnecting after a failed master event read

  正尝试重连到master。当连接确定后,状态就变成 Waiting for master to send event。

  Waiting for the slave SQL thread to free enough relay log space

  relay_log_space_limit 的值非零,中继日志的大小总和超过这个值了。I/O线程等待SQL线程先处理中继日志然后删除它们以释放足够的空间。

  Waiting for slave mutex on exit

  当前线程停止了,这个时间很短。

Slave的SQL线程状态

  以下列出了slave的SQL线程 State 字段中最常见的几种状态:

  Reading event from the relay log

  从中继日志里读到一个事件以备执行。

  Has read all relay log; waiting for the slave I/O thread to update it

  已经处理完中继日志中的全部事件了,正等待I/O线程写入更新的日志。

  Waiting for slave mutex on exit

  当前线程停止了,这个时间很短。

  SQL线程的 State 字段有时候也可能是一个SQL语句。这意味着它从中继日志中读取到一个事件了,从中提取出SQL语句,并执行它。

阅读(4820) | 评论(0) | 转发(0) |
0

上一篇:没有了

下一篇:samba服务配置

给主人留下些什么吧!~~