Linux环境下Mysql数据库主从同步配置文档

                            Linux环境下Mysql数据库主从同步配置文档    

序言

       一直想把最近自己所有学到的东西整理出来,现在终于不算忙了。整理完Redis的文档顺便就整理整理最近学习Mysql的一些经验,目前我的Mysql等级还在地下室呢,就只能拿出之前学到的主从同步配置来分享一下。下一阶段mysql的目标是学习查询优化。

背景

       Java后端免不了要使用到数据库。经验都是从实践中得来的,参照项目组中的大神的文档学习。也是碰到了几次好机会,果断主动申请处理,亲自动手了操作了几次完美收官终于学会了。要不怎么说“实践是检验真理的唯一标准”呢,已经成功很多次了,请大家放心食用。

一、已有数据复制

我一直是使用mysqldump来copy数据的,但是要是数据量比较大的话,导出sql文件就会又费时又大,传到丛库也就比较慢。数据库中数据导出命令如下:

①数据导出命令:导出某个数据库中某个表的表结构以及数据:

  • mysqldump -h Ip地址 -u 用户名 -p 数据库名 表名 > 输出path/文件名.sql

②数据导出命令:导出某个数据库中某个表的表结构:

  • mysqldump -h Ip地址 -u 用户名 -p -d 数据库名 表名 > 输出path/文件名.sql

③数据导出命令:如果还有其他要就在命令行中添加参数,删除已经存在的表:

  • mysqldump -u root -p'big(*)guo' --disable-keys --max_allowed_packet=67108864     --net_buffer_length=32768  --complete-insert  --single-transaction --quick --no-autocommit     --default-character-set=utf8 --master-data=2 db_guo tb_temp > /home/bigguo/tb_temp.sql

④数据导出命令:不删除表,插入时收忽略错误

  • mysqldump -u root -p'big(*)guo' --disable-keys --max_allowed_packet=67108864    --net_buffer_length=32768 --complete-insert --single-transaction --quick --no-autocommit       --default-character-set=utf8 --no-create-info --skip-add-drop-table --insert-ignore --skip-triggers        --skip-add-locks test_guo tb_temp > /home/bigguo/tb_temp.sql

⑤数据导入命令:

  • mysql -h localhost  -u'用户名' -p"密码" 数据库 < /home/lgl/xxxx.sql

二、主从数据库文件配置设置

    ①主库:/etc/my.cnf配置主要属性

  • server-id       = 1001                                                 #主库节点,注意:需要和从库不相同,推荐融合ip地址保证唯一
  • binlog-ignore-db   = mysql                                        #日志文件,忽略哪些库,mysql
  • binlog-ignore-db   = information_schema                 #日志文件,忽略哪些库,information_schema
  • replicate-ignore-db = mysql                                      #数据库同步,忽略哪些库,mysql
  • replicate-ignore-db = information_schema               #数据库同步,忽略哪些库,information_schema
  • log-slave-updates  = 1                                              #表示slave将复制事件写进自己的二进制日志,供slave调用
  • binlog_format    = row                                               #binlog日志格式,仅记录哪条数据被修改,修改成什么样,按行记录
  • binlog-do-db     = 数据库名                                       #重点!!!,指定mysql的binlog日志记录哪个db。没有binlog日志无法同步,同步是通过binlog日志同步的。
  • sync_binlog     = 0
  • auto_increment_offset   = 1
  • auto_increment_increment = 1
  • slave-skip-errors    = all

    ②从库:/etc/my.cnf配置主要属性

  • server-id       = 1002                                                  #从库节点,注意:需要和主库不相同,推荐融合ip地址保证唯一
  • binlog-ignore-db   = mysql                                         #日志文件,忽略哪些库,mysql
  • binlog-ignore-db   = information_schema                  #日志文件,忽略哪些库,information_schema
  • replicate-ignore-db = mysql                                       #数据库同步,忽略哪些库,mysql
  • replicate-ignore-db = information_schema                #数据库同步,忽略哪些库,information_schema
  • log-slave-updates  = 1                                               #表示slave将复制事件写进自己的二进制日志:当设置log_slave_updates时,你可以让slave扮演其它slave的master。此时,slave把SQL线程执行的事件写进行自己的二进制日志(binary log),然后,它的slave可以获取这些事件并执行它。

  • binlog_format    = row                                               #binlog日志格式,仅记录哪条数据被修改,修改成什么样,按行记录
  • sync_binlog     = 0
  • log_bin        = mysql-bin                                           #日志文件,如果该slave为其他库的master,则必须要有这行命令
  • auto_increment_offset   = 1
  • auto_increment_increment = 1
  • slave-skip-errors    = all
  • relay-log-index      = /data/mysqldata/slave-relay-bin.index
  • relay-log        = /data/mysqldata/relay-log         #中继日志

    #丛库独有

  • replicate-do-db    = mysql                                        #同步整个数据库命令,即同步名为mysql的数据库
  • replicate-do-table   = 数据库名.表名                        #同步表命令,即同步数据库下的指定表
  • replicate-ignore-db  = mysql                                    #忽略同步整个数据库命令,即忽略同步名为mysql的数据库

   注binlog_format=row是按行同步能够在一定范围内减少同步失败的可能性,如果按sql同步的话出现一次错误以后的数据就都会有问题。

    ③其他属性说明:

  • read_only         = 1                                                   #注意:只读。防止改变数据,只读
  • slave_skip_errors   = ?                                           #选项有四个可用值,分别为:off/all/ErorCode/ddl_exist_errors,默认off
  • sync_binlog       =(1 or N)                                   #如果开启此选项,MySQL每次提交事务之前会将二进制同步到磁盘上,保证服务器崩溃时不会丢失事件。如果禁用此选项,服务器会少做一些工作,但二进制日志文件可能在服务器崩溃时损坏或丢失信息。如果备库不是那么重要,那么开启会带来额外的开销,它只适用于二进制日志,而非中继日志。
  • auto_increment_offset                                            #表示自增长字段从哪个数开始,指字段一次递增多少,取值范围是1 -65535。
  • auto_increment_increment                                     #表示自增长字段每次递增的量,指自增字段的起始值,其默认值是1,取值范围是1-65535。为了避免两台服务器同时做更新时自增长字段的值之间发生冲突。一般在主主同步配置时,需要将两台服务器的auto_increment_increment增长量都配置为2,而要把auto_increment_offset分别配置为1和2。

注:上述配置信息需要重启数据库才能生效,最重要的如下:

  • 同步表命令:                  replicate-do-table = zmail_ur.zm_group_to_accredit
  • 忽略数据库命令:           replicate-ignore-db = mysql
  • binlog日志同步格式:     binlog_format    = row   
  • binlog日志记录数据库:  binlog-do-db   = 数据库名   

 

三、数据库同步操作过程

①在master上创建用于主从复制的帐号:

grant replication slave on *.* to 'bigguo01'@'11.22.33.%' identified by '1234abc';

  • grant:是授权命令,表示见权限 on 数据库对象 to 某账户
  • bigguo01: 表示用户名
  • 11.22.33.44 :该账号允许访问的ip,也可以使用ip字段可以使用%,%表示任意值
  • 1234abc :表示密码

② 账号立即生效命令:
            flush privileges;

③将master数据copy到丛库中

查询主库存储信息,配置丛库slave命令:

      1、主库运行:show master status;

结果显示:
File                         | Position         | Binlog_Do_DB    | Binlog_Ignore_DB |
+------------------------+-----------------+-----------------------+-------------------------+
| mysql-bin.000456 | 2208509929 |                            |                  

      2、丛库运行:

          ①停止slave:stop slave;

          ②配置主从信息:change master to master_host='主库ip',master_user='copy专用账号',master_password='密码',master_log_file='mysql-bin.000456',master_log_pos=2208509929;

           #如果主库、用户、密码不变,可以直接执行 :  change master to master_log_file='mysql-bin.000456',master_log_pos=2208509929;

          ③启动slave:start slave;

          ④验证主从信息:show slave status \G

若结果显示中 Slave_IO_Running和Slave_SQL_Running两项都为yes则成功,否则需要根据提示修改问题。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值