首页
编程随笔
Java笔记
Html/Css/Js
Android
后端笔记
服务器搭建
BUG收集
Java异常
Android异常
在线工具
Json格式化
编码/解码
Epub在线编辑
登录
发布文章
个人文章
退出登录
首页
技术教程
BUG收集
在线工具
资源下载
登录
发布文章
退出登录
搜索
当前位置:
首页
-
博客
- 正文
关闭
mariadb简单实现主从复制
更新时间:2023-03-15 00:18:25
阅读数:735
发布者:落幕
### mariadb主从复制 原理: (1)master服务器将数据的改变记录二进制binlog日志,当master上的数据发生改变时,则将其改变写入二进制日志中; (2)slave服务器会在一定时间间隔内对master二进制日志进行探测其是否发生改变,如果发生改变,则开始一个I/OThread请求master二进制事件 (3)同时主节点为每个I/O线程启动一个dump线程,用于向其发送二进制事件,并保存至从节点本地的中继日志中,从节点将启动SQL线程从中继日志中读取二进制日志,在本地重放,使得其数据和主节点的保持一致,最后I/OThread和SQLThread将进入睡眠状态,等待下一次被唤醒。 也就是说: 从库会生成两个线程,一个I/O线程,一个SQL线程; I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中; 主库会生成一个log dump线程,用来给从库I/O线程传binlog; SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行; #### 主服务器 第一步:修改server.cnf文件在/etc/my.cnf.d/server.cnf文件中的[mysqld]下面添加 vim /etc/my.cnf.d/server.cnf ```txt #启用二进制日志 log-bin=mysql-bin #服务器唯一ID,一般取IP最后一段 server-id=51 ``` 第二步:重启MySQL服务 ~]# systemctl restart mariadb 第三步:建立账号并授权slave ```txt #授权 MariaDB [(none)]> grant file on *.* to 'root'@'%' identified by '123'; Query OK, 0 rows affected (0.01 sec) #添加主从复制的用户 MariaDB [(none)]> grant replication slave,replication client on *.* to 'root'@'%' identified by '123'; Query OK, 0 rows affected (0.00 sec) #更新数据库 MariaDB [(none)]> flush privileges; Query OK, 0 rows affected (0.00 sec) ``` 注:一般不用root帐号,“%”表示所有客户端都可能连,只要帐号,密码正确,此处可用具体客户端IP 代替,如172.16.1.52,加强安全。 第四步:查询master的状态 MariaDB [(none)]> show master status; ```txt +------------------+----------+--------------+------------------+ | File | Position | Binlog_Do_DB | Binlog_Ignore_DB | +------------------+----------+--------------+------------------+ | mysql-bin.000001 | 1933 | | | +------------------+----------+--------------+------------------+ 1 row in set (0.000 sec) ``` ### 从服务器配置 第一步:修改server.cnf文件在/etc/my.cnf.d/server.cnf文件中的[mysqld]下面添加 server-id=52 第二步:删除UUID文件 删除/var/lib/mysql/auto.cnf文件,重新启动服务。 第三步:配置从服务器 MariaDB [(none)]> change master to master_host='172.16.1.51',master_port=3306,master_user='root',master_password='123',master_log_file='mysql-bin.000002',master_log_pos=117712; 注:master_port为mysql服务器端口号(无引号)。 master_user为执行同步操作的数据库账户。 “611”无单引号,此处的117712就是show master status 中看到的position的值, mysql-bin.000002就是file对应的值。 第四步:启动从服务器的复制功能 MariaDB [(none)]> start slave; Query OK, 0 rows affected, 1 warning (0.00 sec) 第五步:检查从服务器复制功能状态 ```txt *************************** 1. row *************************** Slave_IO_State: Waiting for master to send event Master_Host: 124.71.209.194 Master_User: root Master_Port: 3306 Connect_Retry: 60 Master_Log_File: mysql-bin.000001 Read_Master_Log_Pos: 1113 Relay_Log_File: ecs-79682-relay-bin.000002 Relay_Log_Pos: 555 Relay_Master_Log_File: mysql-bin.000001 Slave_IO_Running: Yes # 成功 Slave_SQL_Running: Yes # 成功 ```