• docker创建mysql5.7.22并配置主从


    debian系统

    安装docker (参考网址:https://cloud.tencent.com/developer/article/1360720)

    1、更新现有的包列表

    sudo apt update
    

      

    2、安装一些允许apt使用包通过HTTPS的必备软件包

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

      

    3、将官方Docker存储库的GPG密钥添加到您的系统

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

      

    4、将Docker存储库添加到APT源:

    add-apt-repository "deb [arch=amd64] https://download.docker.com/linux/debian $(lsb_release -cs) stable"
    

      

    5、使用新添加的repo中的Docker包更新包数据库

    sudo apt update
    

      

    6、确保您要从Docker repo而不是默认的Debian repo安装:

    apt-cache policy docker-ce
    

      

    6、安装Docker

    apt install docker-ce
    

      

    7、现在应该安装Docker,守护进程启动,并启用进程启动进程。检查它是否正在运行:

    systemctl status docker
    

      

    8、拉取mysql指定版本镜像(参考网址:https://www.cnblogs.com/xiaohanlin/p/10012730.html)

    docker pull mysql:5.7.2 

    或者使用DockerFIle的方式
    使用DockerFile创建mysql可以使用如下办法

     1 新建文件夹 dirName
     2 在文件夹下添加mysql配置文件 mysqld.cnf 当然 也可以不用
     3 
     4 添加DockerFile文件
     5 添加内容
     6 FROM mysql:5.7.22
     7 COPY ["mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] #也可以不加
     8 EXPOSE 3306
     9 
    10 执行命令 docker build -t mysql5.7.22:v0 . 创建本地镜像
    11 build 为创建本地镜像
    12 -t 指定镜像的名字
    13 : 指定标签的名字 
    14 . 指定远程服务器的对应文件位置 build 在创建镜像的时候 实际上使用的是远程的服务器(首先我们要理解 docker build 的工作原理。Docker 在运行时分为 Docker 引擎(也就是服务端守护进程)和客户端工具。Docker 的引擎提供了一组 REST API,被称为 Docker Remote API,而如 docker 命令这样的客户端工具,则是通过这组 API 与 Docker 引擎交互,从而完成各种功能。因此,虽然表面上我们好像是在本机执行各种 docker 功能,但实际上,一切都是使用的远程调用形式在服务端(Docker 引擎)完成。也因为这种 C/S 设计,让我们操作远程服务器的 Docker 引擎变得轻而易举。) 该命令 会将.的所有内容 上传到远程服务器,因此我们应当尽可能的使得所上传的文件夹精简,而DockerFile中的文件路径,也应当正确对应。
    15 以上文的COPY为例 是将本地当前文件夹的mysqld.cnf文件复制到所创建镜像的/etc/mysql/mysql.conf.d/mysqld.cnf位置 并命名为mysqld.cnf,如果写成COPY ["../mysqld.cnf","/etc/mysql/mysql.conf.d/mysqld.cnf"] 则在执行build命令的时候需要这么
    16 写(docker build -t mysql5.7.22:v0 ..),如此以来,就会将..文件夹(当前文件的上层文件夹的所有内容)传到远程服务器,镜像无疑就会变得庞大臃肿。

    9、启动mysql容器

    1 (此处使用宿主机的配置文件、存储路径和日记路径启动 需要自己创建、如果没有指定的配置文件可使用
    2 docker cp mysql5_7_22_1:/etc/mysql/mysql.conf.d/mysqld.cnf /etc/conf/mysql/ 
    3 mysql5_7_22_1为容器名
    4 从容器拷贝一份到服务器)
     1 docker run --name mysql5_7_22 -p 3306:3306 --restart=always -v /etc/conf/mysql/mysqld.cnf:/etc/mysql/mysql.conf.d/mysqld.cnf -v /var/log/mysql/log/:/var/log/mysql -v /data/mysql/:/var/lib/mysql --privileged=true -e MYSQL_ROOT_PASSWORD=root -d guodakai/mysql5.7.22:v0
     2 -p 3306:3306 将容器的 3306 端口映射到主机的 3306 端口 (前面为宿主机,后面为容器)
     3 --name 容器名(自己定义)
     4 --restart=always 将容器设置为自启
     5 -v 将宿主机指定内容挂载到容器
     6 --privileged= true 是我启动mysql的时候发现mysql启动不了,通过 docker logs命令查看,发现提示信息是:chown: changing ownership of ‘/var/lib/mysql/....‘: Permission denied (docker logs -f mysql5_7_22 查看指定日志文件)
     7 -e 初始化 root 用户的密码
     8 -d 在后台运行容器
     9 
    10 如果希望容器随docker启动而启动 可添加 --restart=always
    11 如果要设置已经启动的容器可以使用一下命令
    12 docker container update --restart=alway 容器名

    10、进入容器

    docker exec -it mysql5_7_22 bash
    

      

    11、退出容器

    exit
    

      

    12、将其他服务器数据导入容器数据库(两者需要可以相互访问、参考网址:https://www.cnblogs.com/osfipin/p/9927185.html)

    1 mysqldump -uroot -proot --opt jupin_zhizuan | mysql --host=192.168.31.136 -uroot -proot -C jupin_zhizuan
    2 --opt命令可选,建议加上。等同于指定 --add-drop-tables--add-locking --create-option --disable-keys--extended-insert --lock-tables --quick --set-charset。它可以给出很快的转储操作并产生一个可以很快装入MySQL服务器的转储文件。
    3 -C 客户端和服务器之间启用压缩传递所有信息。当然得要有咯。

    13、添加主从服务 (旧方式)
    修改/etc/mysql/mysql.conf.d/mysqld.cnf

    1 主库添加内容:
    2 character-set-server=utf8
    3 default-storage-engine=INNODB
    4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
    5 
    6 server-id=1
    7 log_bin=/var/log/mysql/binlog
     1 从库添加内容:
     2 character-set-server=utf8
     3 default-storage-engine=INNODB
     4 sql_mode=STRICT_TRANS_TABLES,NO_ENGINE_SUBSTITUTION
     5 
     6 server-id=2
     7 log_bin=/var/log/mysql/binlog
     8 innodb_file_per_table=ON
     9 skip_name_resolve=ON
    10 binlog-format=row
    11 log-slave-updates=true
    12 relay_log=/var/log/mysql/relay.log

    以下操作可以使用 navicat操作 (再此之情 需要先同步两个数据库的数据)

    1 进入主库
    2 查询主库状态 SHOW MASTER STATUS
    3 进入从库
    4 停止从库 stop slave;
    5 配置主从连接 CHANGE MASTER TO MASTER_HOST='192.168.174.136',MASTER_USER='root', MASTER_PASSWORD='123456',MASTER_PORT=3306,MASTER_LOG_FILE='binlog.000003',MASTER_LOG_POS=154;
    6 (MASTER_LOG_FILE,MASTER_LOG_POS 为主库状态的file 和 position)
    7 启动从库 start slave;

    !!!主从设置完成后 需要添加一些帐号 只读等
    !!!主从设置完成后 从库挂掉后 重启会自动将数据补全

    //GTID主从配置(推荐)  参考网址:https://blog.51cto.com/7834466/2345202

     1 主配置文件添加内容
     2 [mysqld]
     3 #GTID:
     4 server_id=135 #服务器id
     5 gtid_mode=on #开启gtid模式
     6 enforce_gtid_consistency=on #强制gtid一致性,开启后对于特定create table不被支持
     7 
     8 #binlog
     9 log_bin=master-binlog
    10 log-slave-updates=1 
    11 binlog_format=row #强烈建议,其他格式可能造成数据不一致
    12 
    13 #relay log
    14 skip_slave_start=1 #这一句可以不加 添加之后mysql重启后从库的slave不自动重启
     1 从库的配置文件添加内容
     2 [mysqld]
     3 #GTID:
     4 gtid_mode=on
     5 enforce_gtid_consistency=on
     6 server_id=143
     7 
     8 #binlog
     9 log-bin=slave-binlog
    10 log-slave-updates=1
    11 binlog_format=row #强烈建议,其他格式可能造成数据不一致
    12 
    13 #relay log
    14 skip_slave_start=1 #同上,这一句可以不加 添加之后mysql重启后从库的slave不自动重启

    今进入从库
    依次执行

    1 stop slave;
    2 CHANGE MASTER TO MASTER_HOST='192.168.1.135',MASTER_USER='repl',MASTER_PASSWORD='xxx', MASTER_PORT=3306,MASTER_AUTO_POSITION = 1;
    3 start slave;
    4 show slave statusG; 查看状态
  • 相关阅读:
    5. Mybatis UPDATE更新,DELETE删除
    3. Mybatis Insert
    4. selectKey语句属性配置细节
    2. Mybatis Select
    uoj#282. 长度测量鸡(构造)
    uoj#276. 【清华集训2016】汽水(分数规划+点分治)
    uoj#275. 【清华集训2016】组合数问题(数位dp)
    uoj#274. 【清华集训2016】温暖会指引我们前行(LCT)
    uoj#273. 【清华集训2016】你的生命已如风中残烛(组合数学)
    uoj#272. 【清华集训2016】石家庄的工人阶级队伍比较坚强(矩阵+三维FWT)
  • 原文地址:https://www.cnblogs.com/phpk/p/11121405.html
Copyright © 2020-2023  润新知