1、mysql主从复制的原理
主从复制是一个异步复制的过程,主要是从库发送更新事件到从库,从库读取更新的数据,然后更新内容与主库保持一致。大致过程如下:
1、每当主库更新的时候,更新的事件日志都会存储在二进制文件,称为binlog,当数据库启动,所有的数据库更新记录都会被保存到binlog中。
2、当从库连接主库后,主库会创建一个线程,将binlog发送到从库中并对线程上锁,直到该事件被读取完成,锁才会释放。
3、当从库启动slave后,从库会创建一个I/O线程连接到主库并请求主库发送binlog里面的更新记录到从库上,IO线程读取binlog中的记录并更新到本地文件中。
4、从库开始进行复制,创建一个SQL线程,根据读取到的文件进行更新。
2、mysql主从复制的配置
配置主库
系统:node1(从库,IP地址192.168.23.139),server(主库,IP地址 192.168.23.137)
1、配置/etc/mysql/my.cnf文件
设置log-bin日志,设置唯一的server-id,注意从库的server-id要比主库的大,注意要配置bind_address,否则默认是127.0.0.1,连接数据库会不成功。
2、开启server数据库的外连
GRANT ALL PRIVILEGES ON *.* TO 'root'@'%' IDENTIFIED BY 'root' WITH GRANT OPTION;
赋予root用户所有权限,并且允许所有主机外连。
flush privileges; 执行权限。
记住配置完后要重启数据库。
3、配置Master
create user xiaoming identified by 'Root@root';
grant replication slave on *.* to xiaoming;
创建一个用户xiaoming,密码为Root@root,并赋予建立复制的用户权限。
show master status; 查看master状态后
配置从库
1、修改/etc/mysql/my.cnf文件
重启服务
2、 进入从库命令行
change master to master_host='192.168.23.137',master_user='xiaoming',master_password='Root@root',master_log_file='mysql-bin.000003',master_log_pos=1010; 设置连接主库
start slave;启动slave
Slave_IO_Running和Slave_SQL_Running都为Yes代表成功
三、测试
1、在主库新建立数据库tests,并建表test
2、进入从库,查看是否同步
同步成功