MySQL数据库设置主从同步

MySQL数据库设置主从同步

[toc]

MySQL主从同步的作用

  1. 可以作为一种备份机制,相当于热备份
  2. 可以用来做读写分离,均衡数据库负载

MySQL主从同步的步骤

一、准备操作

  1. 主从数据库版本一致,建议版本5.5以上
  2. 主从数据库数据一致

二、主数据库master修改

  1. 修改MySQL配置
#主从数据库之间的唯一ID
server_id=96
#要同步的数据库
binlog-do-db=p2s
#不要同步的数据库
binlog-ignore-db=mysql
#要两步的数据库的日志文件名
log-bin=p2s-3-bin
# 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 1M
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire-logs-days  = 30
#主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
# 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
#可以从服务器再再同步下去
relay_log=p2s-3-relay-bin
log_slave_updates=1
read_only=1
  1. 启动/重启Master数据库服务,登录数据库,创建数据同步用户,并授予相应的权限
mysql> grant replication slave, replication client \
                on *.* to 'username'@'%' identified by 'password';
Query OK, 0 rows affected (0.00 sec)
mysql> flush privileges;
Query OK, 0 rows affected (0.00 sec)
mysql> show master status;
+---------------+----------+--------------+------------------+-------------------+
| File          | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set | 
+---------------+----------+--------------+------------------+-------------------+
| p2s-3-bin.001 |      414 |      p2s     |      mysql       |                   | 
+---------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)

三、从数据库slave修改

  1. 修改配置文件
#在 [mysqld] 中增加以下配置项
#设置server_id,一般设置为IP
server_id=206
#复制过滤:需要备份的数据库,输出binlog
binlog-do-db=p2s
#制过滤:不需要备份的数据库,不输出(mysql库一般不同步)
binlog-ignore-db=mysql
#开启二进制日志,以备Slave作为其它Slave的Master时使用
log-bin=edu-mysql-slave1-bin
#为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
binlog_cache_size = 1M
#主从复制的格式(mixed,statement,row,默认格式是statement)
binlog_format=mixed
#二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
expire_logs_days=30
#跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
#如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
slave_skip_errors=1062
#relay_log配置中继日志
relay_log=mysql-relay1-bin
#log_slave_updates表示slave将复制事件写进自己的二进制日志
log_slave_updates=1
#防止改变数据(除了特殊的线程)
read_only=1
  1. 保存后重启MySQL服务
service mysql restart
  1. 登录Slave数据库,添加相关参数
mysql> change master to \
    master_host='{110.1.2.3: 主数据库IP}', \
    master_user='{user: 访问主数据库的帐号}',\
    master_password='{passwd: 相应的密码}', \
    master_port={3306: 端口号},\
    master_log_file='{p2s-1-bin.000001: 主数据库的日志文件名}', \
    master_log_pos={106: 日志的postion}, \
    master_connect_retry={30: 错误重连时间(秒)};

mysql> show slave status\G;

主要看以下两个参数,这两个参数如果是Yes就表示主从同步正常

Slave_IO_Running: Yes
Slave_SQL_Running: Yes

可查看master和slave上线程的状态。在master上,可以看到slave的I/O线程创建的连接:

mysql> show processlist\G;

注意:如果在Slave没做只读控制的情况下,千万不要在Slave中手动插入数据,那样数据就会不一致,主从就会断开,就需要重新配置了。

Written by 

你来或不来,我都在这里等你~

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注