- 服务器:centos 7
- 数据库:mysql 8.x
- 搭建数据库集群【目前就是实现2台,1台主服务器,1台从服务器】
- 实现数据库的即时同步
- 复制概述
复制是指将主数据库的DDL和DML *** 作通过二进制日志传到从服务器中,然后在从库上对这些日志重新执行(也叫重做),从而使得从库的数据保持同步。
mysql支持一台主库同时向多台从库进行赋值,从库也可以作为其他从库服务器的主库,实现链状复制。 - 复制原理
- 关闭防火墙
// 关闭 syetemctl stop firewalld // 查看状态 确定是 dead syetemctl status firewalld
- 修改 my.cnf
vi /etc/my.cnf
# mysql 服务器id ,保证整个集群环境中唯一 server-id = 1 # mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin # read-only ,1代表只读 ,0 代表 读写 read-only=0 #忽略的数据库,指不需要同步的数据库 binlog-ignore-db=mysql #指定同步的数据库,如果不指定,就是除忽略的数据库外的其他数据库 #binlog-do-db=db01
- 保存后,重启mysql
syetemctl restart mysqld
- 创建同步数据账户,并进行授权 *** 作
-- 使用mysql数据库 use mysql -- 创建用户 create user myuser identified by '123456'; -- 查看用户 select user, host, authentication_string,plugin from user where user ='myuser'; -- 修改用户密码及密码加密方式 alter user 'myuser'@'%' identified with mysql_native_password by '123456'; 【 默认加密机制是 caching_sha2_password,这种方式不怎么支持远程连接,所以要修改一下就可以连接了】 -- 授予myuser用户全局级全部权限: GRANT ALL PRIVILEGES ON *.* TO 'myuser'@'%' WITH GRANT OPTION; -- 生效(刷新权限) FLUSH PRIVILEGES;
- 查看 master 状态
show master status;
- 主库配置结束
- 关闭防火墙
// 关闭 syetemctl stop firewalld // 查看状态 确定是 dead syetemctl status firewalld
- 修改 my.cnf
vi /etc/my.cnf
# mysql 服务器id ,保证整个集群环境中唯一 server-id = 2 # mysql binlog 日志的存储路径和文件名 log-bin=/var/lib/mysql/mysqlbin
- 保存后,重启mysql
syetemctl restart mysqld
- 登录mysql,执行如下命令
change master to master_host='主数据库ip, master_user='myuser',master_password='123456', master_log_file='mysqlbin.000004', master_log_pos=1149;
- 命名解释
change master to master_host='主数据库ip -- 主数据ip地址 , master_user='myuser' -- 主数据库登录用户名 ,master_password='123456' -- 主数据库登录密码 ,master_log_file='mysqlbin.000004' -- 主数据库日志文件名,直接查看 主库的状态截图的file 值 , master_log_pos=1149; -- 同步主数据库日志文件起始,直接查看 主库的状态截图的postion 值
- 开启同步 *** 作
start slave;
- 查看同步状态
show slave status;
- 从库配置结束
- 在主库创建 数据库,插入数据
-- 创建db01 数据库 create database db01; -- 创建 t_user表 use db01; -- 创建表 create table t_user( id int(11) not null auto_increment, name varchar(50) not null, sex varchar(1), primary key (id) )engine=innodb default charset=utf8; -- 并插入数据 insert into t_user(name,sex) values('Tom','1');
- 在从库中查看结果
-- 显示数据库 show databases;
- 到此,如果显示db01 基本上已经确定复制成功了,后续可以实时 *** 作主库的数据,进行测试复制效果。
这一部分的原理和实现步骤,参考 传智播客风清扬老师的mysql教程,在此表达对风清扬老师的感谢和敬意,他是我转编程路上的导师(当然是我单向的,他不知道的)。我也刚开始学习,如有错误请指正,谢谢!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)