什么是主从复制
对MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。
假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。
MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。
那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。
简单一句话概括:主数据库变化将生成日志文件放在本地,从数据库通过网络请求拿到数据库日志文件写到自己的库中,保证数据一致
主从复制问题:即便不考虑网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从日志中读一条一条执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。
解决办法:清除所有数据,重新同步
主从复制的作用:1数据防丢失2备份3读写分离4数据库负载均衡5高可用
主从复制用法
1,服务器准备
192.168.200.141 主服务器 master
192.168.200.142 从服务器slave
2,修改主服务器配置文件
2.1编辑文件
vi /etc/my.cnf 新增以下内容
server_id=141 ###服务器id
log-bin=mysql-bin ###开启日志文件
2.2重启数据库
service mysqld stop
service mysqld start
2.3主服务器给从服务器账号授权
GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';
//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。
2.4登录主服务器的mysql,查询master的状态
2.5查看ID是否生效
3,修改从服务器配置文件
server_id=142
log-bin=mysql-bin
binlog_do_db=pboss
剩下步骤效验和主服务器不变,不过多截图
3.1启动同步
stop slave
change master to master_host='192.168.200.141',master_user='mysync',master_password='q123456',
master_log_file='mysql-bin.000002',master_log_pos=521;
start slave
host为主数据库IP,user和pass为主数据库授权账号密码,下面两个参数为主服务器执行
show master status;
所得到的参数
4检查从服务器复制功能状态
SHOW SLAVE STATUS
从服务器执行这个命令
若这两个参数均为yes,则成功,此时更改主数据库,从数据库数据相应变化,但更改从数据库,主数据库不变
遇到问题:
1..若是报错Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDs; these UUIDs must be different for replication to work
原因:数据库为copy的,所以数据库的UUID为一样的
解决办法:将/usr/local/mysql/auto.cnf文件删除,按上面重启数据库方法重启数据库即可
2..给账号分配权限
grant all privileges on *.* to 'root'@'172.27.185.1' identified by 'root';
一般不建议用root权限账号,这个是需要IP地址的授权,安全性更高