学习笔记-Mysql主从复制(作读写分离)

Mysql主从复制(作读写分离)

  1. 启动docker的mysql实例
  2. 写配置文件,配置需要同步和忽略的库
  3. 从库连接主库同步数据

一、创建Master实例

启动docker容器

docker run -p 3307:3306 --name mysql-master \
-v /mydata/mysql/master/log:/var/log/mysql \
-v /mydata/mysql/master/data:/var/lib/mysql \
-v /mydata/mysql/master/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=bestvincent_mysql \
-d mysql:5.7 
参数说明
	-p 3307:3306:将容器的3306端口映射到主机的3307端口
	-v /mydata/mysql/master/conf:/etc/mysql:将配置文件夹挂在到主机
	-v /mydata/mysql/master/log:/var/log/mysql:将日志文件夹挂载到主机
	-v /mydata/mysql/master/data:/var/lib/mysql/:将配置文件夹挂载到主机
	-e MYSQL_ROOT_PASSWORD=root:初始化root用户的密码

配置mysql

#修改master基本配置
vim /mydata/mysql/master/conf/my.cnf

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve
#注意:skip-name-resolve一定要加,不然连接mysql会超级慢
#添加master主从复制部分配置
server_id=1
log-bin=mysql-bin
read-only=0
binlog-do-db=gmall_ums
binlog-do-db=gmall_pms
binlog-do-db=gmall_oms
binlog-do-db=gmall_sms
binlog-do-db=gmall_cms


replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
#重启master

二、创建Slave并启动

启动从机docker容器

docker run -p 3316:3306 --name mysql-slaver-01 \
-v /mydata/mysql/slaver/log:/var/log/mysql \
-v /mydata/mysql/slaver/data:/var/lib/mysql \
-v /mydata/mysql/slaver/conf:/etc/mysql \
-e MYSQL_ROOT_PASSWORD=root \
-d mysql:5.7 

配置从机

#修改slave基本配置
vim /mydata/mysql/slaver/conf/my.cnf

[client]
default-character-set=utf8
 
[mysql]
default-character-set=utf8
 
[mysqld]
init_connect='SET collation_connection = utf8_unicode_ci'
init_connect='SET NAMES utf8'
character-set-server=utf8
collation-server=utf8_unicode_ci
skip-character-set-client-handshake
skip-name-resolve 
#添加master主从复制部分配置
server_id=2
log-bin=mysql-bin
read-only=1
binlog-do-db=gmall_ums
binlog-do-db=gmall_pms
binlog-do-db=gmall_oms
binlog-do-db=gmall_sms
binlog-do-db=gmall_cms


replicate-ignore-db=mysql
replicate-ignore-db=sys
replicate-ignore-db=information_schema
replicate-ignore-db=performance_schema
#重启slaver

三、主库授权配置

进入mysql容器内部

#从docker进入mysql内部命令
docker exec -it mysql-master /bin/bash
#进入后运行mysql命令进入mysql命令行
mysql -uroot -proot

授权远程访问用户

#1)、授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;
#2)、添加用来同步的用户
GRANT REPLICATION SLAVE ON *.* to 'backup'@'%' identified by '123456';
#3、查看master状态
show master status\G;

四、从库连接配置

进入从库容器内部后,配置主库连接信息

#1)、授权root可以远程访问( 主从无关,为了方便我们远程连接mysql)
grant all privileges on *.* to 'root'@'%' identified by 'root' with grant option;
flush privileges;

#2)、设置主库连接
change master to master_host='192.168.159.128',master_user='backup',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=0,master_port=3307;
#3)、启动从库同步
start slave;
#4)、查看从库状态
show slave status\G;

五、整合sharding实现多数据源的读写分离

  • 添加maven的sharding依赖

    <dependency>
        <groupId>io.shardingjdbc</groupId>
        <artifactId>sharding-jdbc-core</artifactId>
        <version>2.0.3</version>
    </dependency>
    
  • 创建yml配置文件

    dataSources:
      db_master: !!com.zaxxer.hikari.HikariDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://192.168.214.131:3307/gmall_pms?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: root
      db_slave: !!com.zaxxer.hikari.HikariDataSource
        driverClassName: com.mysql.jdbc.Driver
        jdbcUrl: jdbc:mysql://192.168.214.131:3316/gmall_pms?useUnicode=true&characterEncoding=utf-8&useSSL=false
        username: root
        password: root
    masterSlaveRule:
      name: db_ms
      masterDataSourceName: db_master
      slaveDataSourceNames: [db_slave]
    
  • 创建配置类

    package com.bv.gmall.pms.config;
    
    import io.shardingjdbc.core.api.MasterSlaveDataSourceFactory;
    import org.springframework.context.annotation.Bean;
    import org.springframework.context.annotation.Configuration;
    import org.springframework.util.ResourceUtils;
    
    import javax.sql.DataSource;
    import java.io.File;
    import java.io.FileNotFoundException;
    import java.io.IOException;
    import java.sql.SQLException;
    
    @Configuration
    public class PmsDataSourceConfig {
        @Bean
        public DataSource dataSource() {
            DataSource dataSource = null;
            try {
                //加载配置文件
                File file = ResourceUtils.getFile("classpath:sharing-jdbc.yaml");
                //使用数据源工厂创建数据源实例
                dataSource = MasterSlaveDataSourceFactory.createDataSource(file);
            } catch (FileNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            } catch (IOException e) {
                e.printStackTrace();
            }
            return dataSource;
        }
    }
    
    
发布了12 篇原创文章 · 获赞 4 · 访问量 111

猜你喜欢

转载自blog.csdn.net/qq_44636442/article/details/104941140
今日推荐