Home
Linux
Golang
MySQL
PHP
Other
Message
MySQL主从复制
创建日期:2019-09-02 17:24:43
更新日期:2020-10-21 17:35:52
栏目:
MySQL
浏览:769
[TOC] 数据库安装配置等略过,保证版本一致,配置一致 基于行的复制和基于语句的复制 ## 一、创建复制帐号,主从都配置这个帐号 ~~~ 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;`查看线程,如下查看主库的  查看从库的  # 问题 如果数据没同步,查看错误日志  正确无错误应该是如下图所示 
内容版权声明:本文为舒孝元原创文章,转载无需和我联系,但请注明来自
舒孝元博客:https://www.shuxiaoyuan.com/info/20
联系邮箱:sxy@shuxiaoyuan.com