数据库安装配置等略过,保证版本一致,配置一致 基于行的复制和基于语句的复制

一、创建复制帐号,主从都配置这个帐号

GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'repl'@'%' IDENTIFIED BY 'Password!123';

二、打开主数据库的二进制日志并制定一个独一无二的服务器ID(修改my.cnf文件)

vim /etc/my.cnf
## 输入一下内容
log_bin    =    mysql-bin
server_id    = 1  #一般是取IP地址末8位,但是要确保它是唯一并且不变的 

重启MySQL,查看是否已经创建 show master status

舒孝元博客

三、备库上面也要增加类似配置

以下配置不都是必须的,实际上,只有server_id是必须的

vim /etc/my.cnf

log_bin    =    mysql-bin    # 为了简便,直接设置和主表一样,默认是根据机器名来命名
server_id    = 2
relay_log = /var/lib/mysql/mysql-relay-bin    # 指定中继日志的位置和命名
log_slave_updates = 1    # 允许备库将其重放的事件也记录到自身的二进制日志中,数据库自身会增加额外的工作量
read_only = 1  # 配置选项,不清楚,看书本439页

四、启动复制,不需要修改my.cnf文件,直接用语句,运行下面语句并不会立马开始运行复制

CHANGE MASTER TO MASTER_HOST = '192.168.1.6',
MASTER_USER = 'repl',
MASTER_PASSWORD = 'Password!123',
MASTER_LOG_FILE='mysql-bin.000001',
MASTER_LOG_POS=0;

运行 show slave status;来检查复制是否正确执行

运行下面语句之后就会开始启动复制,建议你看完之后再执行这条语句 运行MySQL命令START SLAVE;开始复制

  1. 以上的建立的基础是:默认主库和从库都是刚刚安装好的,并且都是默认数据,不过一般情况下不是这样
  2. 一般情况下都是一台服务器运行了一段时间,然后再启动复制同步,这个时候从库上面是没有数据的。
  3. 主从复制是从配置了二进制文件的时候开始记录的,没开启之前的数据都是不会同步的(重启服务会重新生成一个新的二进制文件)。
  4. 这个时候就需要将主库的数据线备份到从库来初始化从库。备份有很多方式,冷备份,热备份,mysqldump等都可以
  5. 有错误就停止了,所以要保证数据一致性 简单说下数据备份,保证一致问题
  • 最简单的,直接关闭主库,然后将数据备份到备库,可以采用高效复制文件的方法将数据传送到从库
  • 采用热备份,如果仅使用了MyISAM表,可以在主库运行时采用mysqlhotcopy或者rsyncLaura复制数据,这里不详细展开说明
  • 如果只包含了InnoDB表,可以使用mysqldump命令来转储主库数据并将其加载到备库,然后设置相应的二进制日志坐标 mysqldump --single-transaction --all-databases --master-data=1--host=server1 \ | mysql --host=server2
  • 使用快照或者备份
  • 使用percona Xtrabackup
  • 使用另外的备库

可以运行 SHOW PROCESSLIST;查看线程,如下查看主库的 查看从库的

问题

如果数据没同步,查看错误日志 正确无错误应该是如下图所示