我是按照下面博客中的步骤来的,最后成功了。##问题
这里我主要说一下,如果揍瞎了,怎么重新开始。
在主服务器上的操作没什么大问题。
在从服务器上操作的时候,很容易出问题:
1.开始在主服务器上创建数据库,删除数据库,创建表,删除表、、进行了很多的操作,从服务器就是不好使,查看mysql.log发现,日志没有读取全,是从一个删除数据库的语句开始的,由于这时候从服务器上没有这个数据库,从服务器再执行这条sql语句的时候,就报错了,然后就不往下执行了。
2.于是我就删除了从服务器上/var/lib/mysql/目录下的relay开头的文件,开始只删除的从主服务器上读取的日志文件,也就是文件名类似relay-bin.000002这种格式的文件,发现不好使,而且从服务器上执行start slave的时候,报下面的错误

ERROR 1872 (HY000): Slave failed to initialize relay log info structure from the repository

很显然是mysql继续读之前删除的文件,但是没找到。
在/var/lib/mysql/目录下还有relay-log.info和relay-bin.index这两个文件,都干掉,然后重启mysql,就跟一个新的slave差不多了,可以启动了。
##原理
这里简单描述一下主从复制的原理,方便配置的时候找原因。
基本原理就是,从服务器上有两个线程,一个IO线程,一个SQL线程,

mysql> show slave status \G;
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.232.132
Master_User: userbyslave
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 316
Relay_Log_File: relay-bin.000002
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:

上边的Slave_IO_Running和Slave_SQL_Running就是这两个线程的状态了,IO线程负责从主服务器上拉取日志,SQL线程负责解析执行日志中的内容。

我们是在执行下面的命令的时候,让从服务器连上主服务器的:

CHANGE MASTER TO
MASTER_HOST='192.168.31.84',
MASTER_USER='repl',
MASTER_PASSWORD='slavepass',
MASTER_LOG_FILE='mysql-bin.000004',
MASTER_LOG_POS=154;

在从服务器上执行上边的命令,就可以将从服务器的IO流的源端指向主服务器指定日志文件的指定位置。

上边引用的博客的思路也很明确:

  1. 配置主服务器
  2. 配置从服务器
  3. 在主服务器上给从服务器开一个账号
  4. 配置从服务器用主服务器上开的账号连接上主服务器