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)简单的说就是同步数据库,类似于拷贝数据库到另一台服务器上,但它是实时地保证两个数据库的完全同步。用于分布式数据库。
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)简单的说就是同步数据库,类似于拷贝数据库到另一台服务器上,但它是实时地保证两个数据库的完全同步。用于分布式数据库。
相关文章推荐
- 关于MySql的Unhandled异常
- 如何增量导入MYSQL数据库中的数据
- mysql处理高并发,防止库存超卖
- mysql的学习记录
- MySQL_数据库操作语句
- MySQL 性能优化的最佳20多条经验分享
- MySQL优化必须调整的10项配置
- mysql性能优化-慢查询分析、优化索引和配置
- mysql 的常见语句总结和其他基础知识
- MySQL_登入登出
- MySQL 变量和条件
- MySQL_控制台操作_01
- MySQL怎样存储IP地址
- 在 Ubuntu 14.04 下安装 mysql 5.7.10
- mysql前缀索引
- mysql 对外开放
- 一个单引号引发的MYSQL性能损失(转)
- MySQL LIMIT
- 安装mysql5.7.11zip方法总结
- mysql 5.7.x 的密码