MySql主从复制

我的是自己搭建的一个数据库作为主库,使用docker 作为 从库

        注意:  数据库版本保持一致!!!数据库版本保持一致!!!数据库版本保持一致!!!

1. 查看住库版本

        我的是: 5.6.45

2.安装docker

        参考地址:https://www.docker.com/

3.docker 安装mysql 5.6.45

        小白请参考docker 文档操作

        docker pull mysql:5.6.45

        docker images可查看刚pull 的 mysql.如若过慢可自行修改镜像.

        docker run -p 3360:3306 --name mymysql -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.6.45启动mysql

                -p 3360:3306  端口映射  外网链接数据时请使用  3360 (尽量选择没被占用的端口)

                --name mymysql  定义名称    (mymysql  随意)

                -e MYSQL_ROOT_PASSWORD=123456  设置密码

                -d mysql:5.6.45  启动的镜像

        docker inspect redismaster查看一下容器的IP  (可跳过、后面mysq配置可用)

ok  重点、重点、重点

    修改主库配置文件

        修改 mysql.ini (或 mysql.cnf) -- 有些人配置比较不通

            [mysqld]

            ## 设置server_id  注意要唯一、注意要唯一、注意要唯一

            server-id=1      ## 这个就是在上面讲的可获取内网IP的用处 尽量使用内网IP的最后一段 比较好区分

            ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

            log-bin=mysql-slave-bin 

            ## relay_log配置中继日志

            relay_log=edu-mysql-relay-bin 

        修改从库配置文件

        进入容器      

                docker exec -it 8dfabd8ad85b /bin/bash

                    -it 8dfabd8ad85b  这个是docker  容器运行时的ID 可使用    docker ps 查询

        安装 vim

                第一步:apt-get update

                第二步:apt-get install vim

        cd /etc/mysql/

                由于mysql的版本有点高,配置文件简直就是套娃啊,一层一层的.打开后就是加载、加载、加载.

        直接  vim /etc/mysql/mysql.conf.d/mysqld.cnf

                [mysqld]

                ## 设置server_id  注意要唯一、注意要唯一、注意要唯一

                server-id=2    ## 这个就是在上面讲的可获取内网IP的用处 尽量使用内网IP的最后一段 比较好区分

                ## 开启二进制日志功能,以备Slave作为其它Slave的Master时使用

                 log-bin=mysql-slave-bin 

                ## relay_log配置中继日志

                relay_log=edu-mysql-relay-bin 

        重启mysql         service mysql restart

        由于重启mysql后容器会停止,接下来启动容器

        docker start mymysql

                mymysql  容器名称  上面的启动是已说明

就此、准备工作完成,接下来我们开始配置主从复置工作

1. 查看主库的日志状态

        show master status;

            File            | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

            +------------------+----------+--------------+------------------+-------------------+

             | mysql-bin.000011 |  876059

                File、Position,这两个字段的值一定要记录一下,下面用得上.

2.在主库设置一个复制的账号.

        方法万万千,我就不赘述了

3.进入docker 的mysql 运行容器

        docker exec -it 8dfabd8ad85b /bin/bash

        进入mysql  mysql -uroot -p

        执行:

          change master to master_host='172.17.0.1', master_user='root', master_password='123456', master_port=3306, master_log_file='mysql-bin.000011', master_log_pos= 876059, master_connect_retry=30;

                master_host='172.17.0.1'        主库的IP

                master_user='root'                  上一步设置的主库复制账号

                master_password='123456'  上一步设置的主库复制账号密码

                master_port=3306                  主库端口

                master_log_file='mysql-bin.000011      这个就是上面讲的需要记录的  File  字段的值

                master_log_pos= 876059    这个就是上面讲的需要记录的  Position  字段的值

                master_connect_retry=30      如果主从链接失败的超时时间      默认:60 (s)

OK、配置完毕,可以启动了  启动之前先看看当前状态吧

    show slave status \G;


        被我圈红色的表示暂时并没有启动.接下来我们启动一下

        start slave            start|stop slave    (我看了一下其他的博客写的是 slave start  醉了)

        再次查看状态:

         show slave status \G;

                Last_Errno: 1062

                Last_Error: Error 'Duplicate entry '22980' for key 'PRIMARY'' on query.

            这个时候应该会报错

            显然这个问题是因为插入重复主键导致从库不工作了

            解决方法一:

                    mysql>slave stop;

                    mysql>set GLOBAL SQL_SLAVE_SKIP_COUNTER=1;

                    mysql>slave start;

            解决方法二:

                    slave_skip_errors = 1062

            再次从起mysql  重启 docker 即可

        解决完毕后再次 start slave

        再次查看状态:    show slave status \G;

        

完成

测试一下吧

在主库随便修改一下数据或者字段去从库试试吧

你可能感兴趣的:(MySql主从复制)