Mysql数据库主从同步

描述:MySQL的主从同步是一个很成熟的架构,优点为:①在从服务器可以执行查询工作(即我们常说的读功能),降低主服 务器压力;②在从主服务器进行备份,避免备份期间影响主服务器服务;③当主服务器出现问题时,可以切换到从服务器。

前提:两台数据库服务器系统一致,mysql版本一致。可减少其他问题的可能性

名称

别名

ip地址

用途

服务器主库

Master

192.168.8.238

数据库等服务正常运行

服务器从库

Slave

192.168.8.239

备份主服务器的数据库mysql

实验之前,一定要保证两服务器之间互相可以通讯,否则也无法实现主从备份。

在主服务器Master:

1. 修改mysql数据库cnf文件,/etc/my.cnf

server-id = 1                     //数字1,不固定,只需唯一即可。
log-bin=mysql-bin             日志存储格式,  表示打开binlog,打开该选项才可以通过I/O写到Slave的relay-log,也是可以进行replication的前提;
   innodb_flush_log_at_trx_commit=1 
   sync_binlog=1                       //数字1可以自定义,只要唯一即可。
   binlog-do-db=wordpress              //是表示只备份wordpress,表示需要记录进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项
   binlog_ignore_db=mysql                //表示忽略备份mysql. 表示不需要记录二进制日志的数据库。如果有多个数据库可用逗号分隔,或者使用多个binlog-do-db选项,多行显示
不加binlog-do-db和binlog_ignore_db,那就表示备份全部数据库

 


2. 然后重启MySQL:

[root@localhost ~]# service mysqld restart
Shutting down MySQL. SUCCESS! 
Starting MySQL.. SUCCESS! 
[root@localhost ~]#

3. 登录Master服务器,在主服务器新建一个用户赋予“REPLICATION SLAVE”的权限。192.168.8.239是从服务器的ip地址。赋予从库权限帐号,允许用户在主库上读取日志

mysql –uroo –p
mysql> create user backup@192.168.8.239 identified by 'Per@f0ect*';
mysql> grant replication slave on *.* to backup@192.168.8.239 identified by 'Per@f0ect*';

 ( 说明replication slave 复制需要的权限,监视和管理复制账号权限)

 

mysql> show master status;

 

得到日志文件名为mysql-bin.000010   偏移量为381

注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

配置从服务器Slave

4. 修改mysql数据库conf文件,/etc/my.conf

vi /etc/my.cnf

 

5. 重启从服务器的mysql数据库

6. 对从数据库进行配置

master_host:主服务器的IP,

master_user:配置主服务器建立的用户名;

master_password:配置主服务器建立的用户密码,

master_port: 主服务器的mysql端口,如果未修改,即默认的3306,

master_log_file:主服务器查看的日志文件名,

master_log_pos:主服务器查看的偏移量     //以下命令中381 无单引号

mysql> change master to master_host='192.168.8.238',master_user='backup',master_password='Per@f0ect*',master_port=3306,master_log_file='mysql-bin.000004',master_log_pos=381;

7. 启动slave进程

mysql> start slave;    启动从服务器复制功能

 

mysql> show slave status;

 

查看slave线程状态:

mysql> show slave status\G

 

两行同时为yes,说明配置成功

mysql> show processlist\G;

 

进一步验证配置的正确性,如果不是yes,需检查配置。

8. 至此主从服务器已配置完成。下面验证:

① 主服务器上新建数据库master

 

② 在从服务器上实时查看,发现已同步到从服务器数据库。

 

 

如果主数据库服务器已经存在用户数据,那么再进行主从复制时,需要做以下处理。

主数据库服务器:

(1) 主数据库锁表操作,不让数据再进行写入动作

mysql>flush tables with read lock;

(2) 查看主数据库的状态

mysql>show master status;

记下File以及Position值,以备从服务器使用。

(3) 把主服务器的数据文件复制到从服务器,最好先用tar归档压缩处理以下

(4) 取消主数据库锁定。

mysql >unlock tables;

 

从数据库服务器:

mysql>slave stop;
mysql>change master to master_host='192.168.8.239',master_user='backup',master_password='123456',master_port=3306,master_log_file='mysql-bin.000001',master_log_pos=578
mysql>slave start;

 

其他说明:

主服务器my.cnf

binlog-do-db= 需要备份的数据库名,可写多行。

binlog-ignore-db= 不需要备份的数据库名,可写多行。

从服务器my.cnf

replicate-do-db=test
replicate-ignore-db=mysql

log-slave-updates 配置从库上的更新操作是否写入二进制文件,如果这台从库,还要做其他从库的主库,那么就需要打这个参数,以便从库的从库能够进行日志同步

二进制日志清除