🔥码云GVP开源项目 12k star Uniapp+ElementUI 功能强大 支持多语言、二开方便! 广告
数据库安装配置等略过,保证版本一致,配置一致 基于行的复制和基于语句的复制 ## 一、创建复制帐号,主从都配置这个帐号 ~~~ 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` ​![](https://box.kancloud.cn/fc032c1862cbe44048f3bf99775b5fc5_539x132.png) ## 三、备库上面也要增加类似配置 以下配置不都是必须的,实际上,只有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; ``` ![](https://box.kancloud.cn/96f0da3cc6d895200f5c1079c0473574_398x114.png) ## 运行 `show slave status;`来检查复制是否正确执行 ![](https://box.kancloud.cn/255bdb656925801eb0dd9e705b8243b5_1560x66.png) 运行下面语句之后就会开始启动复制,建议你看完之后再执行这条语句 运行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://box.kancloud.cn/f9b95724a6b94d836156a5731d1b6ff5_917x96.png) 查看从库的 ![](https://box.kancloud.cn/9cb2646f552386e5d7c1c6e34a270002_837x74.png) # 问题 如果数据没同步,查看错误日志 ![](https://i.vgy.me/U3qzgx.png) 正确无错误应该是如下图所示 ![](https://i.vgy.me/eGQ84r.png)