一、数据库主从复制的基本思想
mysql主从复制是指将mysql主服务器中的数据复制到一台或者多台mysql从服务器的过程,将主数据库中的DDL和DML操作通过二进制日志传到复制的服务器上,然后在从服务器上对这些日志重新执行,从而使主从服务器的数据保持同步
在mysql中,复制操作是异步进行的,slaves服务器不需要持续地保持连接接收master服务器的数据
mysql支持一台主服务器同时向多台从服务器进行复制操作,从服务器同时可以作为其他从服务器的主服务器,如果mysql主服务器的访问量比较大,可以通过复制数据,然后在从服务器上进行查询操作,从而降低主服务器的访问压力,同时从服务器作为主服务器的备份,可以避免主服务器因为故障数据丢失的问题
mysql数据库复制操作大致可以分为三个步骤
- 主服务器将数据的改变记录到二进制日志(binary log)中
- 从服务器将主服务器的binary log events复制到它的中继日志(relay log)中
- 从服务器重做中继日志中的事件,将数据的改变与从服务器保持同步
二、数据主从复制的操作
2.1修改主服务器配置
- 配置my.cnf(win服务器my.ini)
[mysqld]
log-bin=mysql-bin
server-id=1
- 重启mysql服务
- 登录mysql
// 配置从服务器的账号,以及复制权限
mysql> CREATE USER 'replication'@'192.168.252.124' IDENTIFIED BY 'mima';
mysql> GRANT REPLICATION SLAVE ON *.* TO 'replication'@'192.168.252.124';
2.2修改从服务配置
- 同样配置my.cnf(win服务器my.ini)
[mysqld]
server-id=2
//如果设置多个从库,就需要设置不同的server-id
- 重新启动从数据库mysql
- 从库上执行一条语句
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.252.123', -- 主库的ip地址
-> MASTER_USER='replication', --主库的用户名
-> MASTER_PASSWORD='mima', -- 主库的密码
-> MASTER_LOG_FILE='mysql-bin.000001', --主库的binary log文件名
-> MASTER_LOG_POS=629; -- 复制binary log文件的开始地址
- 启动从服务器开始线程
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
- 启动完毕之后可以查看从服务器复制状态
mysql> show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event #从服务器的当前状态
Master_Host: 192.168.252.123
Master_User: replication
Master_Port: 3306
Connect_Retry: 60
Master_Log_File: mysql-bin.000001
Read_Master_Log_Pos: 629
Relay_Log_File: master2-relay-bin.000003
Relay_Log_Pos: 320
Relay_Master_Log_File: mysql-bin.000001
Slave_IO_Running: Yes
#读取主程序二进制日志的I/O线程是否正在运行
Slave_SQL_Running: Yes
#执行读取主服务器中二进制日志事件的SQL线程是否正在运行。与I/O线程一样
.
.
.
Seconds_Behind_Master:0
#为0表示已经开始同步
三、测试
通过查询从服务器的状态得知,主从复制配置成功,现在可以在主从创建一张新表,在表中插入一条语句,然后在从库中查看是否有新创建的表以及插入的语句(不可以在配置主从配置前就存在的表中插入语句,会造成主从同步失败)
网友评论