2011年(4)
分类: Mysql/postgreSQL
2011-05-08 20:10:03
Created Tuesday 03 May 2011
vi /etc/my.cnf
server-id = 1
log-bin=mysql-bin
binlog-do-db=ccdb
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. 把打包的数据文件同步到备库并导入数据库
8.启动同步
mysql> start slave;
或者slave start/stop;
其他一些命令:mysql> show slave status\G 查看slave状态
mysql> stop slave; 停掉slave
主 配置文件
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表)
有时候会有一个错误,而导致同步停止,无法继续;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条错误语句。
Slave I/O thread 起不起来
slave状态:waiting to reconnect after a failed master event read
主: 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 来实现)
同步过程错误日志:cannot add or update a child row:a foreign key constraint fails ……
原因:表有外键关联,所以两个表的某值都不能更新
处理办法: 手动同步单条数据后OK
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语句,并执行它。