您的位置:首页 > 数据库 > MySQL

MySQL主从复制

2016-02-20 19:18 525 查看
主从复制:MySQL主从复制的原理就是从服务器读取主服务器的binlog,然后根据binlog的记录来更新数据库。

mysql主从架构中其实就一个主在工作,而从就相当于一个备份机器,从通过日志监测的方式来备份主库上的数据而保证主库的数据安全。在这种架构中如果从上的数据做了改变,主数据是不会发生任何变化的。

为什么会有mysql的主主复制。因为在一些高可用的环境中,mysql的主从不能满足现实中的一些实际需求。比如,一些流量大的网站数据库访问有了瓶颈,需要负载均衡的时候就用两个或者多个的mysql服务器,而这些mysql服务器的数据库数据必须要保持一致,那么就会用到主主复制。

master:

首先将bin-log日志打开

其次将server-id设置为1

将log-slave-updates给关闭掉(默认的情况下mysql是关闭的)

[root@master ~]# vi /etc/my.cnf

log-bin=mysql-bin

server-id=1

[root@master ~]# mysql -uroot -p

Enter password:

mysql> grant replication slave on *.* to 'admin'@'172.17.237.%' identified by '123456' ;

Query OK, 0 rows affected (0.00 sec)

-----------------------------------------------------------------------------------------------------------------------------

建立一个帐户admin,并且允许从172.17.237.0这个网段来登陆,密码是123456。

添加后在从服务器上用 mysql -h172.17.237.111 -uadmin -p123456 来测试下是否可以访问主数据库

报错:Mysql:is not allowed to connect to this MySQL server

解决办法:从服务器上创建一个远程超级用户

grant all privileges on *.* to admin@'%' identified by '123456' with grant option;

-----------------------------------------------------------------------------------------------------------------------------------

mysql> flush privileges;

Query OK, 0 rows affected (0.00 sec)

mysql> show master status;

+------------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

| mysql-bin.000001 | 335 | | |

+------------------+----------+--------------+------------------+

1 row in set (0.00 sec)

mysql>

slave1:

首先将bin-log日志打开

其次将server-id设置为2

将log-slave-updates打开

[root@slave1 ~]# mysql -h172.17.237.111 -uadmin -p123456 -----测试 能够登录 授权成功

Welcome to the MySQL monitor. Commands end with ; or \g.

[root@slave1 ~]# vi /etc/my.cnf

server-id=2

relay_log=mysql-relay-bin

log_slave_updates=1

read_only=1

log-bin=mysql-bin

[root@slave1 ~]# mysql -uroot -p

Enter password:

mysql> stop slave;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='172.17.237.111', master_user='admin', master_password='123456', master_log_file='mysql-bin.000001', master_log_pos=335;

Query OK, 0 rows affected (0.02 sec)

mysql> start slave

-> ;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G;

*************************** 1. row ***************************

Slave_IO_State: Waiting for master to send event

Master_Host: 172.17.237.111

Master_User: admin

Master_Port: 3306

Connect_Retry: 60

Master_Log_File: mysql-bin.000001

Read_Master_Log_Pos: 335

Relay_Log_File: mysql-relay-bin.000002

Relay_Log_Pos: 251

Relay_Master_Log_File: mysql-bin.000001

Slave_IO_Running: Yes -----两项为yes则配置成功

Slave_SQL_Running: Yes

复制(Replication)简单的说就是同步数据库,类似于拷贝数据库到另一台服务器上,但它是实时地保证两个数据库的完全同步。用于分布式数据库。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: