目前情况:

1.系统版本都是rhel5 mysql版本相同
2.主服务器正在运行,不能停止。
3.主服务器IP为:192.168.1.100
  从服务器IP为:192.168.1.101
4.从服务器MSYQL slave 为停止状态
配置步骤:
1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加

server-id=1

log-bin=binlog_name

2、主库增加用户,用于从库读取主库日志

grant replication slave,reload,super on *.* to'slave'@'192.168.1.101'identified by '123456';

flush privileges;

3、从库连接主库进行测试。

mysql -u slave -p -h 192.168.1.100 //master的IP

4、停从库,修改从库/etc/my.cnf,增加选项:

[mysqld]

server-id=2

master-host=192.168.1.100

master-user=slave

master-password=123456

5.锁表

mysql > FLUSH TABLES WITH READ LOCK;

注意:为了保证FLUSH TABLES语句让读锁定保持有效。(如果退出客户程序,锁被释放)。建立新的SSH连接,然后对主服务器上的数据进行快
照。

6.建立快照
tar -cvf data.tar /var/lib/mysql
将压缩包拷贝过去后解压缩

也可以用scp拷贝过去:
scp -r /var/lib/mysql/* 192.168.1.101:/var/lib/mysql/
注意拷贝过去后权限的设置
chown -R mysql.mysql /var/lib/mysql

数据量大可以用mysqldump导出.

7.解锁

mysql > UNLOCK TABLES;

8.记下file pos值
当FLUSH TABLES WITH READ LOCK所置读锁定有效时,读取主服务器上当前的二进制日志名(file)和偏移量值(pos):
mysql > SHOW MASTER STATUS;
+---------------+----------+--------------+------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB |
+---------------+----------+--------------+------------------+
| mysql-bin.003 | 73       | test         | manual,mysql     |
+---------------+----------+--------------+------------------+
File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.003,偏移量为73。记录该值。以后设置从服务器时需要
使用这些值。它们表示复制坐标,从服务器应从该点(也可以是任何点)开始从主服务器上进行新的更新。

9.从服务器执行同步
# mysql>start slave;
# mysql>load data from master;

10.验证配置
登录从服务器输入如下命令

mysql> show slave status\G;

会得到类似下面的列表:

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

都为yes,则配置正确.

11.进行测试:

主库创建表,

mysql>create database sampdb;

mysql>use sampdb;

mysql>create table new (name char(20),phone char(20));

mysql>insert into new (’abc‘,’0532555555’);
主从服务器重启;

打开从库,查看:
#mysql -u root -p
mysql>show databases; //应该能看到master创建的库sampdb

mysql

sampdb

test

mysql>use sampdb;

mysql>show tables;

new

说明主从数据库创建成功。


附:
一些错误信息的处理,主从服务器上的命令,及状态信息。
在从服务器上使用show slave status\G
Slave_IO_Running,为No,
则说明IO_THREAD没有启动,请执行start slave io_thread
Slave_SQL_Running为No
则复制出错,查看Last_error字段排除错误后执行start slave sql_thread
查看Slave_IO_State字段空 //复制没有启动
Connecting to master//没有连接上master
Waiting for master to send event//已经连上
主服务器上的相关命令:
show master status
show slave hosts
show logs
show binlog events
purge logs to 'log_name'
purge logs before 'date'
reset master(老版本flush master)
set sql_log_bin=

从服务器上的相关命令:
slave start
slave stop
SLAVE STOP IO_THREAD //此线程把master段的日志写到本地
SLAVE start IO_THREAD
SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库
SLAVE start SQL_THREAD
reset slave
SET GLOBAL SQL_SLAVE_SKIP_COUNTER
load data from master
show slave status(SUPER,REPLICATION CLIENT)
CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息
PURGE MASTER [before 'date'] 删除master端已同步过的日志

几个跟热备有关的mysql命令:(需要在mysql命令行界面或query )

    * stop slave    #停止同步
    * start slave    #开始同步,从日志终止的位置开始更新。
    * SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误
    * SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。
    * RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER
    * RESET SLAVE   #从机运行,清除日志同步位置标志,并重新生成master.info
      虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,
    * LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
    * LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值
    * CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如
      CHANGE MASTER TO
      MASTER_HOST='master2.mycompany.com',
      MASTER_USER='replication',
      MASTER_PASSWORD='bigs3cret'
    * MASTER_POS_WAIT() #从机运行
    * SHOW MASTER STATUS #主机运行,看日志导出信息
    * SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。
    * SHOW SLAVE STATUS (slave)
    * SHOW MASTER LOGS (master)
    * SHOW BINLOG EVENTS [ IN 'logname' ] [ FROM pos ] [ LIMIT [offset,] rows ]
    * PURGE [MASTER] LOGS TO 'logname' ; PURGE [MASTER] LOGS BEFORE 'date'