首页 > 代码库 > mysql管理之主从复制

mysql管理之主从复制

复制解决的问题

负载均衡

数据备份

数据分布

升级测试

 

复制的工作原理

技术分享 

     (1)master将改变记录到二进制日志(binary log)中(这些记录叫做二进制日志事件,binary log events);
       (2)    slavemasterbinary log events拷贝到它的中继日志(relay log)
       (3)    slave重做中继日志中的事件,将更改应用到自己的数据上。

 

 

常见的复制拓扑

一主库多备库

 

主库 分发主库 备库

--主复制  (双主)

环形复制

 

创建复制帐号

1、在Master的数据库中建立一个备份帐户:每个slave使用标准的MySQL用户名和密码连接master。进行复制操作的用户会授予REPLICATION SLAVE权限。用户名的密码都会存储在文本文件master.info

命令如下:

mysql > GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*

TO backup@10.100.0.200

IDENTIFIED BY 1234;

建立一个帐户backup,并且只能允许从10.100.0.200这个地址上来登陆,密码是1234。这里@后面的ip地址就是slaveip

(如果因为mysql版本新旧密码算法不同,可以设置:set password for ‘backup‘@‘10.100.0.200‘=old_password(‘1234‘)

拷贝数据

(假如是你完全新安装mysql主从服务器,这个一步就不需要。因为新安装的masterslave有相同的数据)

关停Master服务器,将Master中的数据拷贝到B服务器中,使得Masterslave中的数据同步,并且确保在全部设置操作结束前,禁止在Masterslave服务器中进行写操作,使得两数据库中的数据一定要相同!

配置复制(刚安装的数据库)

环境一主多备master       slave1           slave2

ip          192.168.10.6192.168.10.37      192.168.10.158

service-id        6            37              158

 

主库配置:vim /etc/my.cnf   

Log-bin=mysql-bin    //打开二进制日志

Server-id=6   

Service mysqld start   //重启mysql进程

 

Mysql> reset master;

Mysql>grant replication slave,replication client on *.*  to rep1@192.168.10.% identified by luliechu;

Mysql> flush privileges;

 

 

 

备库配置:vim /etc/my.cnf   

Log-bin=mysql-bin    //打开二进制日志

Server-id=37

Relay_log=mysql_relay-bin

Log_slave_updates=1

Read_only=1  

Service mysqld start   //重启mysql进程

Mysql> reset master;

Mysql>change master to master_host=192.168.10.6,  master_user=rep1, master_password=luliechu,  master_log_file=mysql-bin.000001,  master_log_pos=0;

 

Mysql>Start slave;

 

查看主从复制状态

Mysql>show slave status\G

 

 

 

 

 

配置复制(已运行一段时间的数据库)

环境一主多备master       slave1           slave2

ip          192.168.10.6192.168.10.37      192.168.10.158

service-id        6            37              158

 

初始化备库(使其和主库数据一致)

Master上配置:

Mysql>flush tables with read lock;

#mysqldump --lock-all-tables --all-databaes>all.sql

#mysql -e show master status

 

 

Mysql>unlock tables;

#rsync -av all.sql 192.168.10.158:/

Slave2:

Mysql>source /all.sql

 

 

 

备库的配置:

 

备库配置:vim /etc/my.cnf   

Log-bin=mysql-bin    //打开二进制日志

Server-id=37

Relay_log=mysql_relay-bin

Log_slave_updates=1

Read_only=1  

Service mysqld start   //重启mysql进程

Mysql> reset master;

Mysql>change master to master_host=192.168.10.6,  master_user=rep1, master_password=luliechu,  master_log_file=mysql-bin.000001,  master_log_pos=699;


本文出自 “快乐学习” 博客,请务必保留此出处http://983865387.blog.51cto.com/9838888/1875831

mysql管理之主从复制