[mysqld]
server-id=1
log-bin=master-bin
log-bin-index=master-bin.index
character-set-client-handshake = FALSE
character-set-server = utf8mb4
collation-server = utf8mb4_bin
init_connect='SET NAMES utf8mb4'
binlog-do-db=test1 #需要同步的数据库
slave-skip-errors = all #跳过从库错误
[mysqld]
server-id=2
log-bin=mysql-bin #如果从数据库,不需要再往其他数据库同步,可以注释掉
relay-log=slave-relay-bin #必须开启,从主数据库同步的binlog会写入到该目录下
relay-log-index=slave-relay-bin
#如果主从数据库名称相同
replicate-do-db=数据库名
#如果主从数据库名称不同
replicate-rewrite-db= 主数据库名 -> 从数据库名
(以下每项内容根据实际情况填写,最后两项内容就是上一步查询出来的东西)
change master to master_host='192.168.2.151',
master_user='mycentos1',
master_password='maluole',
master_log_file='mysql_bin.000015',
master_log_pos=443;
这两项都为yes的话就匹配成功了,主从配置理论上就可以通了
我们这时就可以测试一下,在主库建一张表,然后去从库刷新看下是否也生成一张相同的表了 。
mysql> CHANGE REPLICATION FILTER REPLICATE_REWRITE_DB = ((binghe_master, binghe_slave));
成功之后start slave就可以了。然后进行在主库进行数据操作,增加或者修改,看从库是否同步进行了操作 。
- 首先需要注意主库和从库最好都用mysql8之前的版本,如果版本过高的话从库匹配主库的时候要注意数据库密码,建立从网上查询mysql8数据库密码加密方式升级导致配置主从不通的详细修改方法(下边提供了一种实测可用的方法)。
- 我们这里主库用于同步的用户就是root用户,拥有最高权限,所以不需要授权操作,直接进行主从连接配置就行,如果是自己新建用户的话需要授权(replication SLAVE以及一些update、insert等crud权限)。
- 然后修改数据库配置文件my.ini/my.cnf,如果没有的话就自己新建一个,在mysql的根目录。(如下配置文件本机试用成功,但是未必全部试用,可以根据网上提供的配置去配,请提前备份好原始配置文件,启动数据库报错的话先还原再从网上查询配置方式)
- 主库配置添加:
-
- 从库配置添加:
- 配置修改完成重启两个数据库。
- (这里为补充内容,mysql版本都为低版本5或者6的话不需要看这一步) mysql8.0后。授权可能会报错。
-
- #如果使用navicate创建用户,需要修改加密方式
- alter user xxx identified with mysql_native_password by 'xxxx'
- #修改host改为所有ip
- update user set host='%' where user='xxx'
-
- 在主库上mysql命令窗口或者navicat上执行 :show master status;
- 然后记录查询出来的内容【file】和【position】
- 然后在从库的mysql窗口或者navicat命令行工具上执行:stop slave ,(防止有正在执行的slave任务导致修改出错,还需要重新输入master参数,比较麻烦),成功stop之后再输入下边的内容,修改主库配置,使从库连接我们想要的主库
- 执行成功之后,在从库继续执行start slave
- 然后在从库执行show slave status,执行结果大致如下
- 如果上一步不是两个yes的话
- Io为connecting或者no的话,就是没连上主库,需要重新执行上边第6步的内容,先stop slave,然后change master...,这里如果觉得填写的内容没错的话,请核对主库数据库版本,版本过高的话需要注意密码的设置方式(这块参照第4步,或者百度一下mysql高版本的密码加密方式)
- Sql为no的话那是数据同步时候报错,可能是主库存在一些修改过的数据和从库不一致,这样不影响,正常测试就行,观察新加数据,或者修改两库都有的相同数据是否会同步操作。(我们上边配置了‘跳过从库错误’就是为了避免这里为no)
- 如果两个都为yes但是数据同步测试没反应的话
- 这样可能就是主库和从库需要同步的数据库名称不相同导致的,先在从库命令行执行stop slave,然后执行一个命令:(将括号里两个数据库名称按实际情况修改)