## mysql8.0 主从配置 ### 一、主库master配置 #### 1、修改配置文件开启bin-log ```sh #mysql8.0版本 vim /etc/mysql/mysql.conf.d/mysqld.cnf #在mysqld.cnf最下面添加 #开启binlog 备份文件名称 log-bin = mysql-bin #server-id在主从复制链路中服务id不能相同 server-id = 101 #不开启binlog的数据库 binlog-ignore-db=information_schema binlog-ignore-db=sys binlog-ignore-db=performance_schema binlog-ignore-db=mysql #只对一下数据库输出binlog 可以写多个,不写则对所有未忽略的输出binlog binlog-do-db = test ``` #### 2、创建master用户,并且设置复制权限 ```mysql #创建用户 用户名可以随意命名,访问地址设置从库ip created user 'master'@'从库ip' identified with mysql_native_password by 'your password'; #赋予权限 grant replication slave on *.* to 'master'@'从库ip'; #刷新使刚才操作生效 flush privileges; ``` #### 3、查看配置是否生效 ```mysql #获取server_id 判断是否和配置文件中server_id相同 show variables like 'server_id'; #不相同则设置和配置文件相同 show variables like 'server_id'; #刷新后再次查看 flush privileges; show variables like 'server_id'; #查看master配置 重启mysql服务生效 sudo service mysql resatrt; show master status; ``` ### 二、从库slave配置 #### 1、修改配置文件 ```shell #server-id 不能和主库相同 server-id=102 #忽略下方所有表操作 replicate_wild_ignore_table= information_schema.% replicate_wild_ignore_table= sys.% replicate_wild_ignore_table= performance_schema.% replicate_wild_ignore_table= mysql.% ``` #### 2、设置主节点参数 ```mysql mysql> CHANGE MASTER TO MASTER_HOST='主服务器id', -- 主库(master)IP MASTER_USER='master', -- 主库(master)用户 MASTER_PASSWORD='123456', -- 主库(master)用户密码 MASTER_LOG_FILE='mysql-bin.000001', -- 主库(master)地址 MASTER_LOG_POS=856; -- 主库(master)位置 在主库中输入 show master status; 可以查看binlog地址 和 position位置 ``` #### 3、查看配置是否生效 ```mysql #获取server_id 判断是否和配置文件中server_id相同 show variables like 'server_id'; #不相同则设置和配置文件相同 show variables like 'server_id'; #刷新后再次查看 flush privileges; show variables like 'server_id'; ``` #### 4、开启主从同步 ```mysql #开启主从 start slave; #查看主从同步状态 show slave status\G; #状态如下则表示同步成功 #Slave_IO_State: Waiting for source to send event #Master_Host: 192.168.3.50 #Master_User: master50 #Slave_IO_Running: Yes #Slave_SQL_Running: Yes ``` ### 三、注意 #### 1、跨库操作不同补问题 我们在主库中添加了忽略库,这里在mysql中 使用 database.table 进行跨库操作就会拦截跨库的操作,所以建议不要使用跨库操作,建议使用use database 切换操作库或者去掉主库忽略配置; ```mysql use mysql; delete test.user where id = 1 #因为所在库是mysql,mysql是我们的忽略库 他不会生成binlog 所以不会向从库同步 ``` #### 2、从库不向主库同步 对从库进行操作不会对主库更新,如果想要从库向主库同步,将住服务器当从服务器,从服务器当主服务器,在执行一遍流程 #### 3、配置注意事项 (1) 主从服务器操作系统保持一致 (2) 主从数据库版本一致 (3) 主库开启bin-log,主库和从库的server_id 唯一