主从复制是mysql中数据库实时同步的一个常用做法了,今天我来给各位介绍一下关于mysql数据库主从复制部署一个过程,希望此例子对各位同学参考参考.
数据库主从复制原理:
数据库的主从复制就是从master数据库复制到slave数据库,在master与slave之间实现整个复制需要三个线程来完成,其中两个在slave端一个在master端.
在master端必须打开binlog功能,因为从数据库需要获得主数据的完整的操作日志然后再自身上顺序的执行日志中的各种操作.
主要步骤:
1、将slave的io线程连上master,请求获得指定日志文件的指定位置之后的操作日志的内容;
2、master获得slave的io线程请求后,将请求中读取到的指定日志的指定位置之后的内容返回给slave端的io线程,其中包括binlog 的位置以及名称;
3、slave端的io线程在接收到信息后,将接收到的日志内容写入slave端的relay log文件的末端,并将binlog的文件名和位置记录到master-info文件中,以便下一次请求时向master提出请求;
4、slave的sql线程会检测到relay log中新增的一些日志内容并加以解析成为可执行的query语句在slave端执行,从而达到master与slave端的数据一致性。
配置方法:MASTER
1、编辑master的配置文件/etc/my.cnf,在[mysqld]中添加以下内容:
- log-bin=mysql-bin#打开mysql的操作日志功能
- binlog_format=mixed#主从复制模式,混合模式(MBR)默认的
- binlog_cache_size=4M#设置binlog缓存大小
- max_binlog_size=300M#设置binlog文件大小,如果不设置,默认是1.1GB
- expire_logs_days=3#bin-log在主库保存的天数,主库产生的bin-log并不会自动删除,需要手动删除
2、在master上对从数据库进行授权,建立复制用户的专有账户
mysql>GRANT REPLICATION SLAVE ON *.* TO ‘repl’@'%’ IDENTIFIED BY ‘repl’;
3、对master的数据库进行备份
在备份master数据时要对master执行锁表操作:
- mysql>FLUSHTABLESWITHREADLOCK;
- QueryOK,0rowsaffected(0.00sec)
- mysql>resetmaster;//刷新数据库
- QueryOK,0rowsaffected(0.00sec)
在不退出该终端的情况下,否则锁表会失效,再次开启一个终端直接打包压缩数据文件或者使用mysqldump工具来导出数据:
- #mysqldump-uroot-h127.0.0.1–opt-RXXXXXX>/data/mysql/backup/XXXXXX.sql
- #cd/data/mysql/backup/
4、备份数据库到从数据库
#tar -czvf XXXXXX.tar.gz XXXXXX.sql
#scp XXXXXX.tar.gz root@10.7.70.42:/data/mysql/backup
可用相同的方法将数据库导入到其他的slave机器上,导入完成后在Master的命令终端上执行一下解锁命令:
- mysql>UNLOCKTABLES;
- mysql>showprocesslist;
- mysql>showmasterstatusG;#查看主服务器的bin-log和id
5、设置slave主机
编辑slave从数据库的/etc/my.cnf配置文件,前面的配置参数与主的一样,都是根据硬件内存进行参数调整:
- #binlog_format=mixed
- #requireduniqueidbetween1and2^32–1
- #defaultsto1ifmaster-hostisnotset
- #butwillnotfunctionasamasterifomitted
- server-id=2//slave的编号注意不要重复
- read_only=1
- binlog_format=mixed
- binlog_cache_size=4M//设置binlog缓存大小
- max_binlog_size=300M//设置binlog文件最大体积
在slave主机上新建一个数据库,导入主数据库的数据:
- mysql>createdatabaseXXX;
- mysql>useXXX;
- mysql>setnamesutf8;
- mysql>source/XXXXXX/XXX.sql
设置从数据库的主master:
- mysql>CHANGEMASTERTOMASTER_HOST=’XX.XX.XX.XX’,//主数据库的ip地址
- ->MASTER_USER=’repl’,
- ->MASTER_PASSWORD=’repl’,
- ->MASTER_LOG_FILE=’mysql-bin.000001′,//这里根据主服务器的binlog和id设置
- ->MASTER_LOG_POS=107;//
设置完成后,开启slave服务:
- mysql>slavestart;
- QueryOK,0rowsaffected(0.00sec)
- mysql>showslavestatusG;//显示slave的状态phpfensi.com
从输出结果中若:Slave_IO_Running和Slave_SQL_Running如果都为Yes时,表示配置成功.
在线添加多个从库:
原理:若直接在主数据库上再次添加从库会执行停止mysql 的服务进行锁表操作从而影响正常的工作流程,故在线添加从数据库可以通过备份旧的从数据库达到数据库复制的目的,再次利用change master 可达到在线添加从数据库的目的.