1.mysql主从复制原理和好处
1.1 mysql主从复制原理
-
从库会生成两个线程,一个I/O线程,一个SQL线程;
-
I/O线程会去请求主库的binlog,并将得到的binlog写到本地的relay-log(中继日志)文件中;
-
主库会生成一个Log Dump Threadp线程,用来给从库I/O线程传binlog;
-
SQL线程,会读取relay log文件中的日志,并解析成sql语句逐一执行;
1.2 主从复制好处
-
主服务器负责写,从服务器负责读,可以避免主库出现锁表的时候,通过从库可以保证业务的正常运转;
-
数据备份,防止数据丢失;
-
减轻服务器的压力,降低磁盘I/O访问的频率,提高单个服务器的性能;
2.mysql主从复制步骤
2.1 mysql官网下载
官网下载地址:https://downloads.mysql.com/archives/community/
2.2 把mysql-8.0.15-winx64.zip 解压为(mysql11和mysql12)
#新建my.ini文件 主要修改红色部分
[client]
port=3307
[mysql]
default-character-set=gbk
[mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3307#Path to installation directory. All paths are usually resolved relative to this.
basedir="E:/lightchen/java_learning/test1/mysql11"#Path to the database root
datadir="E:/lightchen/java_learning/test1/mysql11/data"# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=gbk# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB
2.3 创建mysql11实例
进入cmd管理员进入mysql11 bin目录 执行命令:
mysqld.exe --initialize --console(记住密码 后面修改密码)
#创建mysql11实例
mysqld.exe --install mysql11
--defaults-file="E:/lightchen/java_learning/test1/mysql11/my.ini"
#修改可执行目录
#cmd regedit 注册列表
#启动服务mysql11
net start mysql11
#登录mysql
mysql -uroot -p3307 -p
#修改密码
alter user 'root'@'localhost' identified with mysql_native_password by 'root';
#更改my.ini配置文件 追加主库相关信息
#允许最大连接数
max_connections=200
#=========主从复制关键配置=====================
#主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
server_id=1
#二进制文件存放路径,存放在根目录data
log-bin=mysql-bin
#binlog-do-db=test #需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
#binlog-ignore-db=mysql #不需要复制的库,和上项同理
#=========主从复制关键配置=====================
#重启mysql11实例
#创建myslave用户,并赋予权限
create user 'myslave'@localhost identified by 'myslave'; --创建用户
grant all privileges on *.* to 'myslave'@localhost with grant option; --赋予权限
#记录File 和 Position值
show master status;
2.4 创建mysql12实例同上(2.3)
#my.ini配置文件
[client]
port=3308
[mysql]
default-character-set=gbk
mysqld]
# The TCP/IP Port the MySQL Server will listen on
port=3308#Path to installation directory. All paths are usually resolved relative to this.
basedir="E:/lightchen/java_learning/test1/mysql12"#Path to the database root
datadir="E:/lightchen/java_learning/test1/mysql12/data"# The default character set that will be used when a new schema or table is
# created and no character set is defined
character-set-server=gbk# The default storage engine that will be used when create new tables when
default-storage-engine=INNODB#允许最大连接数
max_connections=200
#=========主从复制关键配置=====================
#主库和从库需要不一致,配一个唯一的ID编号,1至32。 手动设定
server_id=2
#二进制文件存放路径,存放在根目录data
#log-bin=mysql-bin
#binlog-do-db=test #需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制
#binlog-ignore-db=mysql #不需要复制的库,和上项同理
#=========主从复制关键配置=====================
2.5 从库执行命令实现主从复制
change master to master_host="localhost",master_user="myslave",master_password="myslave", master_log_file="mysql-bin.000001",master_log_pos=725,master_port=3307;
#重启数据库
#从库中查看状态
2.6 测试主从复制
2.6.1 主数据库使用myslave用户登录
2.6.2 主库创建test数据库
2.6.3 从库是否也创建了test数据库
2.6.4 主库在test数据库中创建一张用户表t_user并插入两条数据
2.6.5 查看从数据库是否也同步了表t_user和数据
2.6.6 主库中修改数据同样可以同步到从库
#主库
#从库
2.6.7 从库中修改数据不可以同步到主库中
#一般主库用来增、删、改,从库用来读 一主对多从
#从库
#主库