WSL2官网视频教程

Docker ON WSL2安装

MySQL官网指南

安装WSL2

升级至WIN10最新版本

使用WINDOWS预览体验内部版本

  • 打开windows设置
  • 搜索"预览",选择[WINDOWS预览体验计划设置]
  • 获取
  • 登录并链接微软帐户
  • 选择"快"

启用扩展功能

  • 适用于 Linux 的 Windows 子系统
  • 虚拟机平台
  • 重启电脑

微软应用商店

  • 下载Ubuntu18.04 LTS

打开系统更新

  • 等待预览版下载完成(必须下载完毕,才能进行后面的操作,如果windows更新一直卡在检查更新,可以运行更新设置的疑难解答)

打开Ubuntu

  • 创建Ubuntu帐户
  • 创建sudo密码(sudo passwd root)

打开PowerShell

  • 输入wsl --set-version Ubuntu-18.04 2 (这条命令只有内部预览版才有效)
  • 输入 wsl -l -v 查看wsl版本
代码
PS C:\Users\L1yp> wsl -l -v
  NAME                   STATE           VERSION
* Ubuntu-18.04           Running         2
  docker-desktop         Running         2
  docker-desktop-data    Running         2

安装Docker For WSL2

下载地址:https://liangyongpeng.com/html/download.html?last_id=0&pid=2

官方下载可能有点慢。

  • 注册一个docker的帐户,在Docker For Win登录。
  • 跳过DockerForWin的入门教程
  • 选择Resource→WSL INTEGRATION→启用Ubuntu18.04
  • 右下角Apply & Restart
  • 状态栏右键DockerForWin重启

进入Ubuntu设置

切换apt国内源

  • 备份源文件:输入: sudo cp /etc/apt/source.list /etc/apt/source.list.back
  • 编辑source.list,输入: vim /etc/apt/source.list
代码

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-updates main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-backports main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-security main restricted universe multiverse

deb https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

# deb-src [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu bionic stable

deb-src https://mirrors.tuna.tsinghua.edu.cn/ubuntu/ bionic-proposed main restricted universe multiverse

  • 输入sudo apt-get update
  • 输入sudo apt-get upgrade

安装docker-ce

  • 安装依赖
代码

sudo apt-get install apt-transport-https ca-certificates curl gnupg2 software-properties-common

  • 信任公钥
代码

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo apt-key add -

  • 对于AMD64架构的计算机,添加软件仓库
代码

sudo add-apt-repository \

   "deb [arch=amd64] https://mirrors.tuna.tsinghua.edu.cn/docker-ce/linux/ubuntu \

   $(lsb_release -cs\

   stable"

  • 安装
代码

sudo apt-get update

sudo apt-get install docker-ce

  • 安装完事,输入docker info,测试是否连接上docker daemon

拉取MySQL镜像

  • 输入 docker pull mysql

配置相关环境

创建MySQL容器所需环境

  • 创建3个容器的映射文件(夹)
代码

mkdir /lyp/home/mysql

cd /lyp/home/mysql

mkdir master slave-01 slave-02

mkdir master/data master/log master/config master/mysql-files

mkdir slave-01/data slave-01/log slave-01/config slave-01/mysql-files

mkdir slave-02/data slave-02/log slave-02/config slave-02/mysql-files

  • 在config文件夹创建my.cnf文件,master/slave-01/slave-02的server-id分别是1/2/3
代码
[client]
port=3306

[mysql]
no-auto-rehash
default-character-set=utf8mb4
max_allowed_packet=524288000

[mysqld]
server-id=1
max_allowed_packet=524288000
port=3306
secure_file_priv=/var/lib/mysql
datadir=/var/lib/mysql
character-set-server=utf8mb4
init_connect = 'SET NAMES utf8mb4'
default-storage-engine=INNODB
max_connections=512
tmp_table_size=18M
thread_cache_size=8
myisam_max_sort_file_size=64G
myisam_sort_buffer_size=35M
key_buffer_size=25M
read_buffer_size=64K
read_rnd_buffer_size=256K
sort_buffer_size=256K
innodb_flush_log_at_trx_commit=1
innodb_log_buffer_size=1M
innodb_buffer_pool_size=47M
innodb_log_file_size=24M
innodb_thread_concurrency=8
log_bin=on
log-bin=mysql-bin
binlog-do-db=tencent
binlog-do-db=blog
sync_binlog = 1
binlog_checksum=none
binlog_format = mixed

创建MySQL容器

  • MySQL主机容器
代码
docker run     
    --name mysql-master     
    -p 3307:3306     
    -e MYSQL_ROOT_PASSWORD=root     
    -v /home/lyp/mysql/master/data:/var/lib/mysql:rw     
    -v /home/lyp/mysql/master/log:/var/log/mysql:rw     
    -v /home/lyp/mysql/master/config/my.cnf:/etc/mysql/my.cnf:rw     
    -v /home/lyp/mysql/master/mysql-files:/var/lib/mysql-files     
    -d mysql     
    --lower_case_table_names=1
代码

docker run \

    -p 3307:3306 \

    -e MYSQL_ROOT_PASSWORD=root \

    -v /home/lyp/mysql/master/data:/var/lib/mysql:rw \

    -v /home/lyp/mysql/master/log:/var/log/mysql:rw \

    -v /home/lyp/mysql/master/config/my.cnf:/etc/mysql/my.cnf:rw \

    -v /home/lyp/mysql/master/mysql-files:/var/lib/mysql-files \

    --name mysql-master \

    --restart=always \

    -d mysql

  • MySQL从机1号容器
代码

docker run \

    -p 3308:3306 \

    -e MYSQL_ROOT_PASSWORD=root \

    -v /home/lyp/mysql/slave-01/data:/var/lib/mysql:rw \

    -v /home/lyp/mysql/slave-01/log:/var/log/mysql:rw \

    -v /home/lyp/mysql/slave-01/config/my.cnf:/etc/mysql/my.cnf:rw \

    -v /home/lyp/mysql/slave-01/mysql-files:/var/lib/mysql-files \

    --name mysql-slave-01 \

    --restart=always \

    -d mysql

  • MySQL从机2号容器
代码

docker run \

    -p 3309:3306 \

    -e MYSQL_ROOT_PASSWORD=root \

    -v /home/lyp/mysql/slave-02/data:/var/lib/mysql:rw \

    -v /home/lyp/mysql/slave-02/log:/var/log/mysql:rw \

    -v /home/lyp/mysql/slave-02/config/my.cnf:/etc/mysql/my.cnf:rw \

    -v /home/lyp/mysql/slave-02/mysql-files:/var/lib/mysql-files \

    --name mysql-slave-02 \

    --restart=always \

    -d mysql

如果期间报错,通过docker logs [容器名称] 查看日志,

如MySQL主机登录不了,可能是创建失败,通过docker logs mysql-master 查看日志,可能是端口已被占用,或者文件夹映射问题,对应日志去搜索解决方案

配置MySQL主机

  • 输入 docker exec -it mysql-master /bin/bash ,登入MySQL主机
  • 输入 mysql -uroot -proot,登入MySQL
  • 创建从机复制所需的用户及权限
代码

CREATE USER 'repl'@'%' IDENTIFIED BY 'repl';

GRANT REPLICATION SLAVE ON *.* TO 'repl'@'%';

  • 输入 SHOW MASTER STATUS 查看binlog状态
File Position Binlog_Do_DB Binlog_Ignore_DB Executed_Gtid_Set
mysql-bin.000004 151 tencent,blog

File 代表binlog文件名

Position 代表binlog 偏移

Binlog_Do_DB 列代表要同步的数据库

  • 输入 \q 退出 MySQL
  • 输入 exit 推出容器
  • 推出容器之后输入 docker inspect --format='{{.NetworkSettings.IPAddress}}' mysql-master 查看MySQL主机的IP地址,也就是MASTER_HOST的值

配置MySQL从机1号

  • 输入 docker exec -it mysql-slave-01 /bin/bash ,登入MySQL主机
  • 输入 mysql -uroot -proot,登入MySQL
  • 配置主机信息
代码

CHANGE MASTER TO \

    MASTER_HOST='172.17.0.2'\

    MASTER_USER='repl'\

    MASTER_PASSWORD='repl'\

    MASTER_LOG_FILE='mysql-bin.000004'\

    MASTER_LOG_POS=151\

    get_master_public_key=1;

  • 输入 show slave status,查看从机状态
  • 输入 start slave ,开启从机同步

异常情况

  • 输入 stop slave停止同步
  • 输入 reset slave 重置同步信息
  • 输入 show slave status 查看错误信息
  • 重新配置主机信息

主机尝试创建数据库blog

  • 输入 CREATE DATABASE blog DEFAULT CHARACTER SET UTF8MB4 COLLATE UTF8MB4_BIN;
  • 登入从机数据库,查看是否同步了blog数据库

导出数据

mysqldump --databases db1 db2 --master-data > dump.sql

导入数据

mysql -uroot -proot < dump.sql

下载局域网文件

下载单个文件

scp root@目标服务器内网ip:/home/jdk.tar.gz /home

下载文件夹

scp -r root@目标服务器内网ip:/home/目录 /home

刷新用户信息

FLUSH PRIVILEGES

PowerShell(PS) & SSH

  • 输入 ssh-keygen -t rsa -C "xxxxx@xxxxx.com"
  • 打开文件C:\Users\[电脑用户名]\.ssh\id_rsa.pub
  • 服务器

​ Win10中使用ssh免密登录置云服务器,执行ssh root@xxx,PS提示BAD PERMISSIONS 相关信息。

代码
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@         WARNING: UNPROTECTED PRIVATE KEY FILE!          @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
Permissions for 'C:\\Users\\Administrator/.ssh/id_rsa' are too open.
It is required that your private key files are NOT accessible by others.
This private key will be ignored.
Load key "C:\\Users\\Administrator/.ssh/id_rsa": bad permissions

解决办法:

  • 下载GitHub上的项目:openssl-portable

  • 用管理员身份打开PS,进入 [openssl-portable]\contrib\win32\openssh

  • 执行 .\FixUserFilePermissions.ps1 -Confirm:$false

    • 如果此命令报错:无法加载文件XXX,需要先执行 Set-ExecutionPolicy RemoteSigned
  • 再次ssh root@xx即可免密登录服务器

来源地址:https://zixizixi.cn/windows_vscode_ssh_error_bad-owner-or-permissions

查看Windows主机地址

cat /etc/resolv.conf

代码
# This file was automatically generated by WSL. To stop automatic generation of this file, add the following entry to /etc/wsl.conf:
# [network]
# generateResolvConf = false
nameserver 172.22.0.1