一、简介
Mysql作为目前世界上使用最广泛的免费数据库,非常受到企业的欢迎。随着互联网用户的激增,在实际的生产环境中,由单台Mysql作为独立的数据库是完全不能满足实际需求的,无论是在安全性,高可用性以及高并发等各个方面。
因此,一般来说都是通过 主从复制(Master-Slave)的方式来同步数据,再通过读写分离(MySQL-Proxy)来提升数据库的并发负载能力,以此来提升整个系统的性能。
二、主从复制原理
主从复制原理图
1) 在每个事务更新数据完成之前,master在二进制日志记录这些改变。写入二进制日志完成后,master通知存储引擎提交事务。
2) Slave将master的binary log复制到其中继日志。首先slave开始一个工作线程(I/O),I/O线程在master上打开一个普通的连接,然后开始binlog dump process。binlog dump process从master的二进制日志中读取事件,如果已经跟上master,它会睡眠并等待master产生新的事件,I/O线程将这些事件写入中继日志。
3) Sql slave thread(sql从线程)处理该过程的最后一步,sql线程从中继日志读取事件,并重放其中的事件而更新slave数据,使其与master中的数据一致,只要该线程与I/O线程保持一致,中继日志通常会位于os缓存中,所以中继日志的开销很小。
三、配置
3.1 修改主MySQL配置文件my.cnf
进入配置文件:
# vi /etc/my.cnf
在[mysqld] 中添加下面配置。
server-id=128
log-bin=mysql-bin
重启MySQL:service mysqld restart
查看主MySQL状态:mysql>show master status;
mysql> show master status;
±-----------------±---------±-------------±-----------------±------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
±-----------------±---------±-------------±-----------------±------------------+
| mysql-bin.000004 | 154 | | | |
±-----------------±---------±-------------±-----------------±------------------+
1 row in set (0.00 sec)
在主库创建主从同步账号:
mysql> create user repl;
赋予远程登录权限:
mysql> grant replication slave on . to ‘repl’@‘192.168.2.129’ identified by ‘NewPassword’;
mysql> flush privileges; #刷新
3.2 修改从MySQL配置文件my.cnf
在[mysqld] 中添加下面配置。
server-id=129
relay-log=slave-relay-bin
relay-log-index=slave-relay-bin.index
重启从服务器:service mysqld restart
在从库连接主库:
mysql>
change master to master_host='192.168.2.128',master_port=3306,master_user='repl',master_password='NewPassword',master_log_file='mysql-bin.000004',master_log_pos=0;
3.3 开启主从追踪
mysql> start slave;
查看主从同步是否开启:
mysql> show slave status \G;
当出现Slave_IO_Running: Yes , Slave_SQL_Running: Yes两项为yes,时,表示配置成功
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.2.128
Master_User: repl
Master_Port: 3306
Connect_Retry: 60。
Master_Log_File: mysql-bin.000004
Read_Master_Log_Pos: 306
Relay_Log_File: slave-relay-bin.000011
Relay_Log_Pos: 519
Relay_Master_Log_File: mysql-bin.000004
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
Replicate_Do_DB:
Replicate_Ignore_DB:
Replicate_Do_Table:
Replicate_Ignore_Table:
Replicate_Wild_Do_Table: