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