最近由于公司需要,自己在本地尝试了一下MySQL最新社区版本的主从同步的搭建配置过程,在搭建的过程中还是遇到了很多的问题,现在记录如下:
一、MYSQL主从配置
1.1 部署环境
主(master): 192.168.11.179 OS:CentOS 6.8
从(slave2): 192.168.11.177 OS:CentOS 6.8
mysql的版本:社区版8.0.12
1.2 安装mysql
在我之前的博客中已经有了详细的叙述,详见这里
1.3 配置
### 1.3.1 master节点的配置
vim /etc/my.conf
server-id=121 #设置主服务器的ID,可以任意配置但是多个主从之间不能重复
innodb_flush_log_at_trx_commit=2 #
sync_binlog=1 #开启binlog日志同步功能
log-bin=mysql-bin-121 #binlog日志文件名(可以任意命名)
binlog-do-db=xxxx # 这个表示只同步某个库 (如果没有此项,表示同步所有的库)
# 还有一个参数是指定不同步哪些库,这里不再赘述
相关配置项还有很多,如果需要,可以参考这里,这里给出了MySQL的配置文件几乎常用的全部配置项以及说明
1.3.2 配置完后,重启主节点数据库
service mysqld restart
如果开启远程可以略过这步
mysql -uroot -p ##登录mysql
mysql>grant replication slave on *.* to 'mark'@'192.168.11.177' identified by '123456'; ##这句话的本意是:授权给从数据库服务器192.168.1.201,用户名mark,密码123456;但是在MySQL8.0的版本中执行不通过,原因是8.0中的创建命令和赋权命令已经完成分开了,现在网上说的所谓的8.0的安装几乎都没有说明这一点,但是我这边尝试的结果就是这种方式是不行的,需要将命令改变如下:
create user '用户名'@'访问主机' identified by '密码'; #创建账户
grant 权限列表 on 数据库 to '用户名'@'访问主机';# (修改权限时在后面加with grant option) 赋予权限:
mysql>show master status ; ##查看主库的状态 file,position这两个值很有用。要放到slave配置中
mysql> show master status;
+-------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+-------------------+----------+--------------+------------------+-------------------+
| master-bin.000004 | 2029 | | | |
+-------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
这里要记录下file和position两个属性,因为这两个属性需要在slave中的配置中进行指定;
1.3.3 配置从库服务器
vim /etc/my.cnf
server-id=122
innodb_flush_log_at_trx_commit=2
sync_binlog=1
log-bin=mysql-bin-122
1.3.4 配置完后,重启从节点的mysql
service mysqld restart
mysql -uroot -p
mysql>stop slave;
mysql> change master to master_host='192.168.11.179',master_user='replicator',master_password='123456',master_log_file='master-bin.000004',master_log_pos=2029;
mysql> start slave; #开启从库 (stop slave:关闭从库)
mysql> show slave status \G; #Slave_IO_Running,Slave_SQL_Running 都为Yes的时候表示配置成功
完成上述配置后,你有可能看到的配置项已经是成功的了,如下所示:
mysql> show slave status\G
*************************** 1. row ***************************