什么是主从同步?
实现数据自动同步的服务结构;
主服务器:接受客户端访问连接
从服务器:自动同步主服务器数据
主从同步的原理:
master(主服务器):
启用binlog日志
slave(从服务器):
slave_IO:复制master主机binlog日志文件里的SQL命令到本机的relay-log文件里
slave_SQL:执行本机relay-log文件里的SQL语句,实现与master数据一致
构建思路(必看):
配置主服务器:
启用binlog日志,授权用户,查看binlog日志信息
配置从服务器:
设置server_id
确保与主服务器数据一致(如果数据不一致会导致后期从服务器无法工作!)
指定主库信息
启动slave程序
查看状态信息
构建服务:
配置主服务器:
1.修改主配置文件---启用binlog日志 并重启服务:
] # vim /etc/my.cnf
[mysqld]
log_bin=日志名
server_id=id值
:wq 保存
] # systemctl restart mysqld 重启服务
(不设置日志目录默认创建在数据库目录下 /var/lib/mysql ---可以 ls 去查看)
2.授权用户---
用户权限replication slave
用户名自定义
客户端地址允许从库连接
密码自定义:
] # mysql -uroot -p密码
mysql > grant replication slave on *.* to 用户名@"%" identified by "密码"
3.可以通过 show master status\G 来查看日志信息 保证操作正确
配置从服务器:
1.修改主配置文件 my.cnf---制定server_id
不允许与主库server_id值相同!!!
] # vim /etc/my.cnf
[mysqld]
server_id=52
.......
] # systemctl restart mysqld
2.确保与主服务器数据一致(如果主,从服务器从未更改或创建过库,请忽略此步骤):
在主服务器上备份数据,将备份文件拷贝给从服务器:
主 ] # mysqldump -uroot -p密码 --master-data 数据库名 > /allbak.sql
主 ] # scp /allbak.sql root@从服务器ip地址:/root
从服务器恢复数据:
从 ] # mysql -uroot -p密码 数据库名 < /root/allbak.sql
在从服务器查看备份文件中的binlog日志信息及日志偏移量
从 ] # vim /root/allbak.sql
3.指定主服务器信息
mysql > change master to
-> master_host="主服务器ip地址",
-> master_user="repluser(授权时设置的用户名)",
-> master_password="授权时设置的密码",
-> master_log_file="mysql51-bin.000001",
-> master_log_pos=日志偏移量;
mysql > start slave; //启动slave进程
tips-------: master信息会自动保存到 /var/lib/mysql/master.info文件
若更改主库信息时,应先执行stop salve 修改后在执行 start slave;
4.查看slave状态,确认IO进程,SQL进程都是Yes状态
mysql > show slave status\G;
Slave_IO_State: Waiting for master to send event
Master_Host: 主服务器ip
Master_User: 授权时创建的用户名
... ...
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
这几项都正确说明服务构建成功!
相关文件:
存放在数据库目录下:
文件名 | 说明 |
---|---|
master.info | 主库信息 |
relay-log.info | 中继日志信息 |
主机名relay-bin.xxxxxx | 中继日志 |
主机名relay-bin.index | 索引文件 |