码迷,mamicode.com
首页 > 数据库 > 详细

MySQL主从复制步骤详解

时间:2017-11-14 11:24:05      阅读:195      评论:0      收藏:0      [点我收藏+]

标签:mysql主从复制

MySQL主从复制步骤详解

1 主从服务器开启时间同步

[root@storage  ~]# ntpdate 172.18.0.1

2 恢复操作

       首先判断在构建主从复制架构时主服务器是否有数据。若是已有数据对其备份后在从服务器恢复。若主从架构的构建都为从0开始。可以略过此步。主从复制的起始点为备份操作时,主节点所处的日志文件及其事件位置。

       注意:从服务器的MySQL版本需和主服务器的版本相同或高于其版本

3 配置主数据库

[root@storage  ~]# vim /etc/my.cnf

[mysqld]

log_bin  = /var/log/mariadb/mysql-bin 

server-id  = 1  

innodb_file_per_table  = on

skip_name_resolve  = on

log_bin:该参数后跟文件路径表示开启二进制日志,所跟路径mysql用户必须有读写权限。建议与数据目录分别存放,并放置于不同磁盘所在分区,用以降低其损坏率。

server-id:在做主从同步架构中,主服务器的server-id1,从服务器不为1

Innodb_file_per_table:后跟on或者1为设置InnoDB为独立表空间模式,在设置此参数后使用InnoDB引擎的每个数据库的每个表都会创建一个独立的表空间,该项有一下特点:每个表都有自己独立的表空间;每个表的数据和索引都会存储在自己的表空间中。可以实现单表在不同数据库之间移动(单表导入,导出);空间可以回收(除drop table操作外,表空间不能自己回收)。

skip_name_resolve:跳过使用DNS域名解析。

       启动服务(若数据库正在使用并开启binlog可不重启)

[root@web  ~]# systemctl restart mariadb

添加主从复制的用户:

MariaDB  [(none)]> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO  copyuser@‘192.168.10.%‘ IDENTIFIED BY ‘copypass‘;

MariaDB  [(none)]> FLUSH PRIVILEGES;

配置从数据库

[root@storage1  ~]# vim /etc/my.cnf

[mysqld]

datadir=/var/lib/mysql/

server-id=2

relay_log=relay-log

relay_log_index=relay-log.index

read_only=1

innodb_file_per_table=1

skip_name_resolve=1

datadir:指定数据所在目录

server-id不能为1,当一主多从时,其server-id也最好不同

relay_log:后跟路径表示开启中继日志,使用相对路径时表示在于数据目录在同一目录下。

read_only:从服务器只读。其他与主服务器一致。

启动服务:

[root@  storage1 ~]# systemctl start mariadb

与主服务器建立连接

MariaDB  [(none)]> CHANGE MASTER TO MASTER_HOST=192.168.10.6,

    -> MASTER_USER=copyuser,

    -> MASTER_PASSWORD=copypass,

    -> MASTER_LOG_FILE=‘ mysql-bin.000005‘,

-> MASTER_LOG_POS=24622;

MASTER_LOG_FILE, MASTER_LOG_FILE为备份时截止的事务时间点。可在恢复时使用的备份目录下xtrabackup_info文件中找出。

[root@ storage1 ~]# grep ‘binlog_pos‘  2017-11-13_20-29-22/xtrabackup_info

binlog_pos = filename ‘mysql-bin.000005‘, position ‘24622

当然,如果主从复制架构构建时为从0开始。需要在主服务器上使用以下命令查看:

[root@storage  ~]# mysql

MariaDB  [(none)]> show master status;

+------------------+----------+--------------+------------------+

|  File             | Position |  Binlog_Do_DB | Binlog_Ignore_DB |

+------------------+----------+--------------+------------------+

|  mysql-bin.000005 |    49652 |              |                  |

+------------------+----------+--------------+------------------+

1  row in set (0.00 sec)

开启一个IO_THREAD线程

MariaDB  [(none)]> START SLAVE ;

START SLAVE [IO_THREAD|SQL_THREAD];# 启动复制线程,停止的话使用STOP

 

主从复制架构中应注意要点:

1 应限制从服务器为只读

       在从服务上设置read_only=ON;此限制对拥有SUPER权限的用户均无效

 

              如何阻止所有用户:     

                  mysq> FLUSH TABLES WITH READ LOCAK;    # 连上去不退出(测试时使用)

2如何保证主从复制的事物安全?

       在主节点启用参数:sync_binlog=ON,即遇到事物提交时,必须将bin-log缓冲区中记录下来的事件立即刷写至磁盘上的二进制日志文件中,从而通知从节点来复制同步。也可使用sysnc_binlog=n的方式,来开启此选项,当n次事务提交之后,MySQL执行一次fsync之类的磁盘同步命令,将缓冲区中内容写入磁盘。当n=0时,表示当事务提交之后,只将binlog_cache中的数据写入bin_log文件,而不进行磁盘同步,这种方式性能最好,但无法保证事务安全性

如果使用的是innodb存储引擎:

innodb_flush_logs_at_trx_commit= 1    # 将内存中的事物相关立即写到磁盘上的事物日志中去。

innodb_support_xa= ON      # xa:分布式式事物;即是否让innodb支持分布式事物,分布式提交

SLAVE节点: 

skip_slave_start= ON    # 关闭自动提交。选取手动启动,避免错误

必要的时候可以开启# MariaDB[(none)]> show variables like "%relay_log%";

    主节点:

       sync_slave_start = ON

    从节点:

       sync_relay_log

       sync_relay_log_info

所遇故障:

 使用备份恢复至从文件时在copy-back过程中出现Error: datadir must be specified.

故障说明:

说明是恢复时,未能找到数据恢复目录,此时只需要在mariaDB的配置文件中指定数据库文件目录即可

解决办法:

在配置文件中添加datadir参数。

本文出自 “Keep simple keep stupid” 博客,请务必保留此出处http://yangzhiheng.blog.51cto.com/11586378/1981493

MySQL主从复制步骤详解

标签:mysql主从复制

原文地址:http://yangzhiheng.blog.51cto.com/11586378/1981493

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!