跳至主要內容
如何在github部署静态网站

1、 GitHubPage介绍

1.1 ok

1.2 搭建个人githubpage

个人page和项目page的区别就是个人page只有一个,所谓的个人Page说白了也是一个特殊的项目Page,无非就是它的仓库名字比较特殊,必须为<username>.github.io,比如java框架`spring-cloud.github.io`、`facebook.github.io`,注意个人page的仓库名一定要加上 `.github.io`才算个人Page,不加的话就是一个普通项目了。
个人page有啥特殊之处呢?
在访问页面时可以直接使用https://<username>.github.io,不用加仓库名,普通的项目page,访问时需要加仓库名,比如https://<username>.github.io/<reponame>


Sino大约 2 分钟部署搭建
mysql8搭建主从复制

1、mysql主从复制

1.1 搭建主从复制目的?

为了实现读写分离,解决数据库性能问题,读写分离中,“读”的数据是从哪里来呢?其实他是从“写”库copy过来的

1.2 使用docker搭建基于mysql8的主从复制

  1. 创建容器

    docker run --name mysql_master -p 3001:3306 -e MYSQL_ROOT_PASSWORD=root -d mysql:latest
    

    这一步创建容器的目的是查看那以及获取mysql配置文件,然后把它的配置文件copy到宿主机,这样方便直接在宿主机修改mysql配置,如果不事先把mysql配置文件获取出来,直接用docker的-v去挂载的话会有问题,无法达到把docker容器配置映射到宿主机的目的(可能是我的方式不对)

  2. 把容器内mysql配置copy到宿主机,配置文件在/etc/mysql,直接把整个目录copy到宿主机

    docker cp 容器ID@:/etc/mysql /home/user/master #master 库的配置,路径可以自由在指定
    docker cp 容器ID@:/etc/mysql /home/user/slave  #slave库配置
    
  3. 分别修改master和slave的配置文件my.cnf,在mysqld下增加以下内容

    master配置

    [mysqld]
    ## 设置server_id,一般设置为IP最后一位,直接写ip会报错,同一局域网内注意要唯一
    server_id=100  
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能,可以随便取,最好有含义(关键就是这里了)
    log-bin=edu-mysql-bin  
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M  
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed  
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062  
    

    slave配置

    [mysqld]
    ## 设置server_id,一般设置为IP最后一位,直接写ip会报错,同一局域网内注意要唯一
    server_id=101  
    ## 复制过滤:也就是指定哪个数据库不用同步(mysql库一般不同步)
    binlog-ignore-db=mysql  
    ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用
    log-bin=edu-mysql-slave1-bin  
    ## 为每个session 分配的内存,在事务过程中用来存储二进制日志的缓存
    binlog_cache_size=1M  
    ## 主从复制的格式(mixed,statement,row,默认格式是statement)
    binlog_format=mixed  
    ## 二进制日志自动删除/过期的天数。默认值为0,表示不自动删除。
    expire_logs_days=7  
    ## 跳过主从复制中遇到的所有错误或指定类型的错误,避免slave端复制中断。
    ## 如:1062错误是指一些主键重复,1032错误是因为主从数据库数据不一致
    slave_skip_errors=1062  
    ## relay_log配置中继日志
    relay_log=edu-mysql-relay-bin  
    ## log_slave_updates表示slave将复制事件写进自己的二进制日志
    log_slave_updates=1  
    ## 防止改变数据(除了特殊的线程)
    read_only=1  
    
  4. 删除刚启动的容器,当然不删除也无所谓,我们启动它主要是获取里面的mysql配置,好方便映射出来

    docker ps #查看容器id
    docker rm -f mysql容器id
    
  5. 启动master

    
    ~~~shell
    docker run --name mysql_master -p 3001:3306 -e MYSQL_ROOT_PASSWORD=root -v /home/chenkun/DockerConfigs/mysql-cluster/master/mysql:/etc/mysql -d mysql:latest
    
  6. 查看master的状态,这一步查询结果后续第9步slave会用到

    $ mysql -h 127.0.0.1 -P 3001 -uroot -proot
    
    mysql> show master status;
    +----------------------+----------+--------------+------------------+-------------------+
    | File                 | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
    +----------------------+----------+--------------+------------------+-------------------+
    | edu-mysql-bin.000003 |      396 |              | mysql            |                   |
    +----------------------+----------+--------------+------------------+-------------------+
    1 row in set (0.00 sec)
    
  7. 在master添加一个账户,并给用户授权,目的是给slave用来从master同步数据用的(创建用户建议用navicat,因为要选择插件为mysql_native_password)

    #如果非要使用命令行创建用户使用以下命令(推荐使用navicat)
    mysql>CREATE USER 'slave'@'%' IDENTIFIED BY 'root';
    mysql>user mysql
    mysql>update user set plugin='mysql_native_password' where user = slave;
    
    mysql> GRANT REPLICATION SLAVE, REPLICATION CLIENT ON *.* TO 'slave'@'%';   # 授权给slave
    
  8. 启动slave

    # 映射到宿主机3002端口,挂载其对应的配置目录
    docker run --name mysql_slave -p 3002:3306 -e MYSQL_ROOT_PASSWORD=root -v /home/chenkun/DockerConfigs/mysql-cluster/slave/mysql:/etc/mysql -d mysql:latest
    
  9. 查看宿主机的ip,设置和master的关联(注意此处不能用localhost以及127.0.0.1,在容器中使用localhost指向的是容器而不是宿主机)

    docker inspect 容器id #在返回结果找ip,172.17.x.x
    

    172.17.0.2是master容器的ip,slave是第7步在master建立的用户,root是密码 ,edu-mysql-bin.000003和master_log_pos是第6步查询的解雇哦

    ##记得先进入先进入slave库,在mysql命令行执行以下
    mysql> change master to master_host='172.17.0.2', master_user='slave', master_password='root', master_port=3306, master_log_file='edu-mysql-bin.000003', master_log_pos=156, master_connect_retry=30; 
    
  10. 启动slave

    mysql>start slave;
    
  11. 查看slave状态,13、14行为yes就ok了,如果连接失败在47行Slave_SQL_Running_State会报失败原因


ChenSino大约 7 分钟java部署搭建