设为首页 收藏本站
查看: 997|回复: 0

[经验分享] MySQL配置主主及主从备份

[复制链接]

尚未签到

发表于 2017-12-12 09:35:27 | 显示全部楼层 |阅读模式
  MySQL主从备份配置实例
  场景:
  1、主服务器192.168.0.225、从服务器192.168.0.226。其中,主服务器上已有数据。
  2、主从服务器上的mysql版本及安装配置相同。
  一、主从备份的原理:
  主服务器数据库的每次操作都会记录在二进制日志文件mysql-bin.xxx中。从服务器的I/O线程使用专用帐号登陆到主服务器中读取该二进制文件,并将文件内容写入到自己本地的中继日志relay-log文件中。然后从服务器的SQL线程会根据中继日志中的内容执行SQL语句。
  这要求两台服务器有同样的初态。
  二、同步初态:
  1、将主服务器要同步的数据库加锁,避免同步时发生改变:
  

>use database_name;  

>flush tables with read lock;  

  2、使用mysqldump工具导出数据:
  

mysqldump -uroot -pxxx database_name >database_name.sql  

  3、备份完成后,解锁数据库:
  

>unlock tables;  

  4、将初始数据导入从数据库:
  

>create database database_name;  

>use database_name;  

>source database_name.sql;  

  完成以上操作后,主从服务器就有一样的初态了。
  三、主从同步设置:
  1、配置从数据库:
  /etc/my.cnf主要配置如下:
  

log-bin=mysql-bin                                 #开启二进制日志  
   
  

  
server-id       = 2                               #主数据库id为1,不能相同。
  
replicate_wild_do_table=test.%                    #只同步test库下的表
  
relay_log=mysqld-relay-bin                        #记录中继日志
  
log-slave-updates=YES                             #从服务器同步后记录日志
  

  修改完成后重启mysql服务。
  2、查看主服务器日记记录位置:
  

>show master status\G  

  显示内容如下:
  

***************** 1. row ****************  File: mysql
-bin.000001       #当前记录的日志  Position: 80647293               #日志中记录的位置
  Binlog_Do_DB:
  
Binlog_Ignore_DB:
  
1 row in set (0.00 sec)
  

  3、主服务器创建允许从服务器同步数据的账户:
  

>grant replication slave on *.* to 'user_name'@'192.168.0.226'>  

  4、从服务器开启同步:
  

>change master to  master_host
='192.168.0.225',  master_user
='user_name',  master_password
='ahaii',  master_log_file
='mysql-bin.000001',  master_log_pos
=80647293;  

  配置完以上后,重启从服务器mysql服务。
  5、查看从服务器是否已经成功开启同步:
  

>show slave status\G  

  显示如下:
  

*************************** 1. row ***************************  Slave_IO_State: Waiting
for master to send event  Master_Host:
192.168.0.225  Master_User: user_name
  Master_Port:
3306  Connect_Retry:
60  Master_Log_File: mysql
-bin.000001  Read_Master_Log_Pos:
1114  Relay_Log_File: mysqld
-relay-bin.000004  Relay_Log_Pos:
1260  Relay_Master_Log_File: mysql
-bin.000002  Slave_IO_Running: Yes
  Slave_SQL_Running: Yes
  Replicate_Do_DB:
  Replicate_Ignore_DB:
  Replicate_Do_Table:
  Replicate_Ignore_Table:
  Replicate_Wild_Do_Table: test.
%  Replicate_Wild_Ignore_Table:
  Last_Errno: 0
  Last_Error:
  Skip_Counter: 0
  Exec_Master_Log_Pos:
1114  Relay_Log_Space:
1563  Until_Condition: None
  Until_Log_File:
  Until_Log_Pos: 0
  Master_SSL_Allowed: No
  Master_SSL_CA_File:
  Master_SSL_CA_Path:
  Master_SSL_Cert:
  Master_SSL_Cipher:
  Master_SSL_Key:
  Seconds_Behind_Master: 0
  
Master_SSL_Verify_Server_Cert: No
  Last_IO_Errno: 0
  Last_IO_Error:
  Last_SQL_Errno: 0
  Last_SQL_Error:
  Replicate_Ignore_Server_Ids:
  Master_Server_Id:
1  
1 row in set (0.00 sec)
  

  其中:Slave_IO_Running和Slave_SQL_Running的状态都是YES,说明同步开启成功。
  现在就可以去主服务器上的test库下创建表开测试同步了。
  MySQL主主备份配置实例
  在主从备份配置完毕的基础上实现双主备份:
  一、在从服务器上创建用于同步的帐号:
  

>grant ...  

  二、修改主服务器mysql.cnf,加入
  

replicate_wild_do_table=test.%  
relay_log
=mysqld-relay-bin  
log
-slave-updates=YES  

  三、记录从服务器二进制日志文件名与位置:
  

>show master status\G  

  四、主服务器开启同步设置:
  

>change master to  master_host
='192.168.0.226',  master_user
='user_name',  master_password
='ahaii',  master_log_file
='mysql-bin.000009',  master_log_pos
=107;                  

  然后重启mysqld服务。
  以上就是mysql主从、主主设置的过程。
  ===================
  四、疑惑记录:
  1、关于my.cnf配置文件中binlog-format的值:
  mysql的binlog-format有三种格式,分别是:row、statement和mixed
  1.1、row:基于行的复制(row-based replicate,RBP)
  优点:
  binlog中可以不记录执行的sql语句的上下文相关的信息,仅需要记录那一条记录被修改成什么了。所以rowlevel的日志内容会非常清楚的记录下每一行数据修改的细节。而且不会出现某些特定情况下的存储过程,或function,以及trigger的调用和触发无法被正确复制的问题
  缺点:
  所有的执行的语句当记录到日志中的时候,都将以每行记录的修改来记录,这样可能会产生大量的日志内容,比如一条update语句,修改多条记录,则binlog中每一条修改都会有记录,这样造成binlog日志量会很大,特别是当执行alter table之类的语句的时候,由于表结构修改,每条记录都发生改变,那么该表每一条记录都会记录到日志中。
  1.2、statement:基于SQL语句的复制(statement-based replicate, SBR)
  每一条会修改数据库的SQL语句都会被记录在binlog中。
  优点:
  不需要记录每一行的变化,减少了binlog日志量,节约了IO,提高性能。(相比row能节约多少性能与日志量,这个取决于应用的SQL情况,正常同一条记录修改或者插入row格式所产生的日志量还小于Statement产生的日志量,但是考虑到如果带条件的update操作,以及整表删除,alter表等操作,ROW格式会产生大量日志,因此在考虑是否使用ROW格式日志时应该跟据应用的实际情况,其所产生的日志量会增加多少,以及带来的IO性能问题。)
  缺点:
  由于记录的只是执行语句,为了这些语句能在slave上正确运行,因此还必须记录每条语句在执行的时候的一些相关信息,以保证所有语句能在slave得到和在master端执行时候相同 的结果。另外mysql 的复制,像一些特定函数功能,slave可与master上要保持一致会有很多相关问题(如sleep()函数, last_insert_id(),以及user-defined functions(udf)会出现问题).
  使用以下函数的语句也无法被复制:
  * LOAD_FILE()
  * UUID()
  * USER()
  * FOUND_ROWS()
  * SYSDATE() (除非启动时启用了 --sysdate-is-now 选项)
  同时在INSERT ...SELECT 会产生比 RBR 更多的行级锁。
  1.3、mixed:混合模式复制(mixed-based replicate,MBR)
  mysql的默认模式。
  mixed模式是以上两种模式的混合使用,一般的语句修改使用statment格式保存binlog,如一些函数,statement无法完成主从复制的操作,则采用row格式保存binlog,MySQL会根据执行的每一条具体的sql语句来区分对待记录的日志形式,也就是在Statement和Row之间选择一种.新版本的MySQL中队row level模式也被做了优化,并不是所有的修改都会以row level来记录,像遇到表结构变更的时候就会以statement模式来记录。至于update或者delete等修改数据的语句,还是会记录所有行的变更。
  2、关于复制参数:replicate-do-db、replicate-do-table、replicate-wild-do-table
  MySQL官网的介绍:https://dev.mysql.com/doc/refman/5.5/en/replication-options-slave.html
  2.1、replicate-do-db:在从服务器上设置需要同步的数据库,要同步多个库时可以写多行,每行一个。
  缺点:不适用于跨库数据更新的复制。
  2.2、replicate-do-table:在从服务器上设置需要同步的表,格式为db_name.tb_name。每行一个,同步多个表时需要写多行。
  缺点:不适用于跨库数据更新的复制。
  2.3、replicate-wild-do-table:在从服务器上设置需要同步的数据库,格式为db_name.tb_name。每行一个,同步多个表时需要写多行。可使用通配符如"%"、"_",来匹配多个表,如同步所有以share字符串开头的数据库的所有use字符串开头的表 :replicate-wild-do-db=share%.user%。
  支持跨库数据更新的复制。

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-423235-1-1.html 上篇帖子: jAVA-yaolin 下篇帖子: MySQL常用数据类型
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表