MySQL服务器的主从复制过程

12年前
对于MySQL服务器的主从复制分为两种情况:

一、两台MySQL服务器中都没有数据

在复制结构中从服务器的mysql的版本要比主服务器的一样或者高也行。
######################################################################################################
1、在主服务器上修改配置文件:
vim /etc/my.cnf
/修改:
server-id = 1 (默认是1)

# service mysqld restart

  2、连接到mysql数据库创建用户并赋于复制的权限
mysql>GRANT REPLICATION CLIENT,REPLICATION SLAVE ON *.* TO repl@'172.16.%.%' IDENTIFIED BY '123456';
   

 3、在从服务器上修改配置文件:

vim /etc/my.cnf
修改:
servier-id = 11
关掉二进制日志
  # log-bin=mysql-bin
添加如下内容:
relay-log=relay-bin
relay-log-index=relay-bin.index

# service mysqld restart

4、在主和从服务器上分别清空一下日志

用命令:mysql>flush master;

同时在从服务器上也清空一下日志
在从服务器上:mysql> flush slave;
 要使主从服务器的日志位于相同一个结点,否则会出错。 
  5、清空日志后就可以连接到主服务器上了
mysql> CHANGE MASTER TO MASTER_HOST='172.16.35.1',MASTER_USER='repl',MASTER_PASSWORD='123456';
用命令:mysql> show slave status\G 来查看一下是否已经连接上
如果出现以下结果表明连接成功,则连接失败。
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
  6、连接失败的原因有多种:
最常见的情况分别是:1、在主服务器上的用户可能出错
2、没有重新滚动一下主从服务器的日志,在连接前有必要重新滚动一下。

 7、 最后
在主服务器上创建或者删除数据库、表,就可以同步到从服务器上了。
在从服务器上也可以查看到从服务器要比主服务器慢多少时间用命令:
mysql> show slave status\G
定位到:Second_Behind_Master:0 (0,表示时间说明没有延迟)

二、主服务器上已经有数据,此时再开启从服务器
 1、在开启从服务器之前要先把主服务器上的数据导入从服务器中。所以要先备份一下主服务器上的数据
# mysqldump --all-databases --lock-all-tables --master-data=2 > /tmp/slave.sql
2、将备份复制到从服务器中
# scp /tmp/slave.sql 172.16.35.2:/tmp/
3、在从服务器上,把备份导入服务器中 
mysql> source /tmp/slave.sql
4、下面就可以连接了,但是在连接之前要先查看备份的文件
用命令head来查看
head -30 /tmp/slave.sql ##查看前30行的
有一行是:
CHANGE MASTER TO MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=279;
说明备份的位置是:MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=279
所以在连接之前一定要说明这个位置:
mysql>CHANGE MASTER TO MASTER_HOST='172.16.35.1',MASTER_USER='repl',MASTER_PASSWORD='123456',MASTER_LOG_FILE='mysql-bin.000001', MASTER_LOG_POS=279;
返回的结果:Query OK, 0 rows affected (0.02 sec)
说明备份成功
 5、下面就可以启动从服务器了
mysql>start slave;
mysql>show slave status\G ##查看从服务器的状态是否连接成功
如下所示说明成功连接:
Slave_IO_Running: Yes

Slave_SQL_Running: Yes

经过以上的步骤就完成了mysql服务器的主从复制。如果有不同的地方请提出来,以便共同进步!