目录
(二)I/O(Input/Output) 指的是计算机与外部设备之间的数据传输
(一)准备 2 台 CentOS 虚拟机;详见http://t.csdn.cn/vH97M
(二)每台虚拟机上需要安装好 mariadb以及mariadb-server
(二)启动master服务器 systemctl restart mariadb
(五)查看master的日志信息show master status;
(二)启动master服务器 systemctl restart mariadb
(五)查看slave状态 show slave status\G;
(一)在Master中创建数据库jx create database jx;
(二)在Slave中查看数据库 show databases;
相关知识点:
一、MySQL 支持的复制实现类型
基于语句的复制(STATEMENT):在主服务器上执行的 SQL 语句,在从服务器上执行同样的语句。MySQL 默认采用基于语句的复制,效率比较高。(SQL语句重新执行)
基于行的复制(ROW):把改变的内容复制过去,而不是把命令在从服务器上执行一遍。(复制数据)
混合类型的复制(MIXED):默认采用基于语句的复制,一旦发现基于语句无法精确复制时,就会采用基于行的复制。(即基于语句又基于行)
二、主从复制的原理图
![](https://img-blog.csdnimg.cn/a21ddbbf7021428ea05b446487ae5867.png)
![](https://img-blog.csdnimg.cn/9c84ff0a259347bb8f927d49f2423326.png)
主从复制的原理
slave
会从Master
读取binlog
来进行数据同步。
三、补充知识点
(一)线程(thread)
线程是轻量级的执行单元,它与进程共享进程的地址空间、文件描述符等。
线程是由进程创建的,每个进程至少有一个线程。
线程有三种类型:
①用户线程
用户线程是由用户空间的线程库(如pthread库)实现的,用户线程在内核中并不存在对应的线程实体,它们的调度和管理都由用户程序完成。
②内核线程
内核线程是由内核创建和管理的线程,它们是真正的系统执行单元。内核线程可以访问内核的数据结构和代码,但不能访问进程的用户空间。
③轻量级进程(LWP)
轻量级进程也是由内核创建和管理的线程,它们与内核线程类似,但是具有更轻量级的调度和上下文切换开销。
(二)I/O(Input/Output) 指的是计算机与外部设备之间的数据传输
I/O可以分为以下几种类型
① 阻塞I/O
当应用程序发起一个I/O操作时,内核会一直等待,直到操作完成并返回结果。在等待期间,进程会被阻塞,无法执行其他任务。
② 非阻塞I/O
当应用程序发起一个I/O操作时,内核会立即返回,无论操作是否完成。如果操作未完成,内核会返回一个错误码,应用程序可以继续执行其他任务。
③ I/O多路复用
I/O多路复用是一种同时等待多个I/O操作完成的机制。在Linux中,可以使用select、poll、epoll等系统调用实现I/O多路复用。
④信号驱动I/O
信号驱动I/O是一种事件驱动的I/O机制,应用程序通过信号处理函数来处理I/O事件。在Linux中,可以使用sigaction系统调用来设置信号处理函数。
⑤异步I/O
异步I/O是一种非阻塞的I/O机制,当应用程序发起一个I/O操作时,内核会立即返回,但不会阻塞进程。当操作完成时,内核会通知应用程序。在Linux中,可以使用aio_read、aio_write等异步I/O函数实现异步I/O。
MySQL主从复制的搭建
一、准备工作
(一)准备 2 台 CentOS 虚拟机;详见http://t.csdn.cn/vH97M
(二)每台虚拟机上需要安装好 mariadb以及mariadb-server
注意:2 台 CentOS 虚拟机静态配置IP要修改
2 台 CentOS 虚拟机时间要同步
二、对时服务器:ntp服务器
作用:为了让主从服务器之间没有时间差
(一)master(主服务器操作)
①安装:yum install -y ntp
②修改配置文件:vim /etc/ntp.conf 注意:这个配置文件不分区域
配置: server 127.127.1.0 #定义时间服务器
fudge 127.127.1.0 stratum 8 #定义时间层次
③启动服务:systemctl start ntpd
④查看系统时间也就是网络时间 date
⑤查看硬件时间,也就是主板上电池所支持的时间点 hwclock
⑥实现系统与硬件时间同步(同步的是系统时间):hwclock -w
(二)客户端对时(客户端操作)
ntpdate 主服务器IP地址
三、主服务器的mysql配置
(一)修改配置文件/etc/my.cnf
server-id=11
log-bin=master-bin
log-slave-updates=true
注意:该配置需要写到 [mysqld]区域内
(二)启动master服务器 systemctl restart mariadb
(三)登录mysql
(四) 配置可用的访问用户
grant replication slave on *.* to 'slave'@'192.168.115.%' identified by '123.com';
flush privileges; #表示刷新特权
(五)查看master的日志信息show master status;
四、从服务器的mysql配置
(一)修改配置文件/etc/my.cnf
server-id=22
relay-log=slave-bin
relay-log-index=slave-bin.index
注意:该配置也需要写到 [mysqld]区域内
(二)启动master服务器 systemctl restart mariadb
(三) 指定master
change master to master_host='192.168.115.128',master_user='slave',master_password='123.com',master_log_file='master-bin.000003',master_log_pos=555;
注意:① 在master配置输入查看master的日志信息的命令show master status; 能够查看到
master_log_file='master-bin.000003'
master_log_pos=555
②master_password='123.com‘ 指定的是slave的密码
(四)开启slave slave start;
(五)查看slave状态 show slave status\G;
(六)确认线程状态
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
(七)两个线程状态都为Yes时,会生成以下文件
![](https://img-blog.csdnimg.cn/a139c25b971b46b9a90cf2400b19d620.png)
(八)在指定master时,可能会出现的问题
1、问题一
![](https://img-blog.csdnimg.cn/37f81a10250e4657a784af7b8910abe5.png)
![](https://img-blog.csdnimg.cn/c91750e69ce049068f038bccf6f0f77b.png)
解决办法:
①关闭slave slave stop;
②cd /var/lib/mysql
③ ll
④rm -cf master.info slave-bin.* relay-log.info
⑤重新指定master
change master to master_host='192.168.115.128',master_user='slave',master_password='123.com',master_log_file='master-bin.000001',master_log_pos=2031;
注意:此时的 master_log_file='master-bin.000001',master_log_pos=2031与之前的值有所不同,需要再次在master配置输入查看master的日志信息的命令’show master status; ‘,重新输入
⑥再次开启slave slave start;
2、问题二
![](https://img-blog.csdnimg.cn/65721a4fe045408f98905bd3a89928df.png)
![](https://img-blog.csdnimg.cn/71475855ce7b4e7ba0dd2a18060bf41a.png)
解决办法:检查修改的配置文件是否写到 [mysqld]区域内