原理:
主服务器将所有命令写入二进制日志当中,从服务器将主服务器中的二进制日志复制到中继日志中,在执行一遍,即实现复制。
复制的三个线程:
主服务器:Dump线程 提供数据给从服务器。
从服务器:I/O线程,从主服务器接受并写入中继日志中。
SQL thread 从中继日志中读出数据,并执行一次,应用数据,写数据。
实现复制的个步骤:
1.改主从上的server-id ,主为1,从是不能为1的任意数
主:vim /etc/my.cnf
server-id = 1
从:vim /etc/my.cnf
server-id = 10
2.主启动二进制日志,从启动中继日志
从启动中继日志:
vim /etc/my.cnf
relay-log=relay-bin
relay-log-index=relay-bin.index
3.在主服务器上建立复制用户账户,使之具有REPLICATION SLAVE和REPLICATION CLIENT的权限
mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO repl(用户)@'192.168.0.%' IDENTIFIED BY '123456(密码)'
//// SHOW GRANT FOR rel@ '192.168.0.%'; 显示用户
4.在从服务器上执行命令:
mysql>CHANGE MASTER TO MASTER_HOST='server(主服务器的ip地址)',
->MASTER_USER='REPL'
->MASTER_PASSWORD='123456'
5.启动从服务器进程:
mysql> START SLAVE;
mysql> SHOW SLAVE STATUS\G 查看从服务器的工作属性:
当显示有:
Slave_IO_Running:Yes
Slave_SQL_Running:Yes
时,表示从服务器正常启动
配置完成后,在主服务器上创建数据库和表后,从服务器上都会自动创建 。另外,当从服务器停止后,在主服务器上创建数据库和表后,在启动从服务器,从服务器上会自动创建数据库和表(因为从服务器中有CHANGE MASTER命令,且已经被记录下来),但可能会有一定的延时。
如果主服务器上已经有很多数据,而从服务器刚刚创建,可以使用如下方法进行备份:
1.先将主服务器中的数据复制:
# mysqldump --all-databases --lock-all-tables --master-data=2 > /root/slave.sql(复制到哪里)
2.在从服务器中导入:
由于在root目录下mysql不能读取所以:
#mv slave.sql /tmp
然后读入:
mysql> SOURCE /tmp/slave.sql
mysql>CHANGE MASTER TO MASTER_HOST='server(主服务器的ip地址)',MASTER_USER='REPL',MASTER_PASSWORD='123456' ,MASTER_LOG_FILE='mysql-bin.000001',MASRER_LOG_POS=备份的位置
mysql>START SLAVE;