mysql 主从复制,读写分离

主从复制(mysql自带)

 

mysql 主从复制,读写分离

 

概念

影响MySQL-A数据库的操作,在数据库执行后,都会写入本地的日志系统A中。

 假设,实时的将变化了的日志系统中的数据库事件操作,在MYSQL-A的3306端口,通过网络发给MYSQL-B。

 MYSQL-B收到后,写入本地日志系统B,然后一条条的将数据库事件在数据库中完成。

 那么,MYSQL-A的变化,MYSQL-B也会变化,这样就是所谓的MYSQL的复制,即MYSQL replication。

 在上面的模型中,MYSQL-A就是主服务器,即master,MYSQL-B就是从服务器,即slave。

 日志系统A,其实它是MYSQL的日志类型中的二进制日志,也就是专门用来保存修改数据库表的所有动作,即bin log。【注意MYSQL会在执行语句之后,释放锁之前,写入二进制日志,确保事务安全】

 日志系统B,并不是二进制日志,由于它是从MYSQL-A的二进制日志复制过来的,并不是自己的数据库变化产生的,有点接力的感觉,称为中继日志,即relay log。

 可以发现,通过上面的机制,可以保证MYSQL-A和MYSQL-B的数据库数据一致,但是时间上肯定有延迟,即MYSQL-B的数据是滞后的。

【即便不考虑什么网络的因素,MYSQL-A的数据库操作是可以并发的执行的,但是MYSQL-B只能从relay log中读一条,执行下。因此MYSQL-A的写操作很频繁,MYSQL-B很可能跟不上。】

 

解决问题

数据如何不被丢失

备份

读写分离

数据库负载均衡

高可用

 

服务器准备

192.168.110.177  主服务器 master

192.168.110.178  从服务器slave

修改(master)服务器

vi /etc/my.cnf  新增以下内容

server_id=177  ###服务器id

log-bin=mysql-bin   ###开启日志文件

重启服务器

service mysqld start

service iptables stop

主服务器给从服务器账号授权

GRANT REPLICATION SLAVE ON *.* to 'mysync'@'%' identified by 'q123456';

//一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP代替,如192.168.145.226,加强安全。

登录主服务器的mysql,查询master的状态

mysql 主从复制,读写分离

如果结果为null,主服务器my.cf没有配置好.

 

 

修改从(slave)服务器

server_id=178

log-bin=mysql-bin

binlog_do_db=test

change master to master_host='192.168.110.177',master_user='mysync',master_password='q123456',

         master_log_file='mysql-bin.000002',master_log_pos=343;

启动同步

start slave

检查从服务器复制功能状态

SHOW SLAVE STATUS

mysql 主从复制,读写分离

Slave_IO_Running: Yes    //此状态必须YES
Slave_SQL_Running: Yes     //此状态必须YES