• Windows环境下MySQL主从配置


    以下操作是在 Windows Web Server 2008 R2 操作系统下

    一、环境介绍及说明

    主库的版本:mysql-5.6.42-winx64.zip

    主库的ip地址:127.0.0.1

    主库的端口:3306

    从库的版本:和主库一样

    从库的ip地址:127.0.0.1

    从库的端口:3307

    如果有多余的服务器也可以不用都配置到一台电脑上,只需要各服务器ip能ping通就行。

    注:主库和从库版本可以一致也可以不一致,需要说明一点,如果两者版本不一致,一般主库的版本需要比从库的版本低,这样就可以避免由于版本问题,有些sql不能执行的问题。

    二、下载安装MySQL

    MySQL官网给出的安装包有两种格式,一个是msi格式,一个是zip格式的,这里使用zip格式的进行安装。

    MySQL5.6下载链接:https://dev.mysql.com/downloads/mysql/5.6.html#downloads

    下载完成后解压,解压后的目录:

    三、配置MySQL主从

    (1)主库(MySQL-Master)的安装与配置

    主库根目录下有一个 my-default.ini 命名的配置文件复制一个,改名为 my.ini,用文本编辑器打开,进行配置以下基本信息:

    [mysqld]

    # 服务端使用的字符集默认为8比特编码的latin1字符集,设置为utf8字符

    character-set-server=utf8

    # 创建新表时将使用的默认存储引擎

    default-storage-engine=INNODB

     

    # 设置mysql的安装目录

    basedir = D:MySQL-5.6mysql-1

    # 设置 mysql数据库的数据的存放目录,MySQL 8+ 不需要以下配置,系统自己生成即可,否则有可能报错

    datadir = D:MySQL-5.6mysql-1data

    # 设置3306端口

    port = 3306

    server_id = 1    # 主库和从库需要不一致,分别配一个唯一的ID编号

    log_bin=master-bin    # 二进制文件存放路径,存放在根目录data文件夹下

     

    # binlog-do-db=test   # 需要复制的库,多个库用逗号隔开,如果此项不配置所有主库都参与复制,这里要是配置了,同时也要在Slave(也就是你的从库) 上设定。

    # binlog-ignore-db=mysql    # 不需要复制的库,和上项同理

     

    [mysql]

    # 设置mysql客户端默认字符集

    default-character-set=utf8

    [client]

    default-character-set=utf8

    配置好的截图:

    配置好主数据库后,复制,粘贴一个,作为从数据库

    打开cmd,进入主库的bin文件夹中

    输入以下安装命令:

    mysqld -install MySQL-Master

    注:其中的MySQL-Master为主库MySQL的服务名称

    这里遇到一个如下图所示的错误提示:

    解决方法:在别的Windows系统的下 C:WindowsSystem32 中搜索找到 msvcp100.dll,复制到服务器相同的文件夹中即可。

    出现以下提示,表示安装成功。

    安装成功之后,输入以下命令启动MySQL:

    net start mysql-master

    注:net stop mysql-master 为停止命令

    服务启动成功之后,就可以登录了,如下图所示,输入 mysql -u root -p(第一次登录没有密码,直接按回车),登录成功!

    登录上之后设置root用户的密码(这里修改成123456)

    执行命令

    use mysql;

    update user set password=password("123456") where user="root";

    flush privileges;

    执行完毕后如下图所示:

    这样就设置好了root用户的密码了。

    查看设置的字符集(my.ini配置文件里把字符集设置成了utf8,为了能正常显示中文)

    show variables like "%character%";show variables like "%collation%";

    (2)从库(MySQL-Slave)的安装与配置  

    进入从库目录中,修改 my.ini 配置文件,具体文件内容如下,将里面的路径修改成你自己的从库路径。

    安装从库服务。

    打开cmd,进入从库的bin文件夹下

    执行命令:mysqld -install MySQL-Slave

    注:其中的MySQL-Slave为从库MySQL的服务名称

    出现以下提示,表示安装成功。

    启动从的mysql服务器

    执行命令:net start mysql-slave

    注:net stop mysql-slave为停止命令

    出现以下提示信息表示从库启动成功

     

    同样的,登录从库设置从库root用户的密码(这里修改成123456)

    这里特别需要注意:在cmd下登录从库时需要指定设置的端口号,否则会报以下错误

    ERROR 2003 (HY000): Can't connect to MySQL server on 'localhost' (10061)

    mysql -u root -P 3307 -p(大写的P代表端口号,小写的p代表密码)

    执行命令

    use mysql;

    update user set password=password("123456") where user="root";

    flush privileges;

    执行完毕后如下图所示:

    至此,主、从数据库的安装及配置就完成了。

    进入Windows的服务管理(进入服务管理方法,快键键Win+R打开运行框窗口,输入services.msc),即可看到主从MySQL,以及它们的状态

    四、关联主库(MySQL-Master)与从库(MySQL-Slave)

    上面我们已经把MySQL-Master和MySQL-Slave相关配置都已配置完成,并分别启动了,现在我们在cmd下分别登录到主库和从库中。

    注意:登录主库,需要先进入到主库的bin文件夹下,再登录MySQL,然后,执行命令 show master status 查看master的状态

    下图中的 File 和Position 记录下来,在从库配置中会用到 (注意:每次重启主数据库  File 和 Position 参数都会变),如下图所示:

    从库,也需要先进入到从库的bin文件夹下,再登录MySQL,然后,执行命令 show slave status 查看slave的状态

    我们可以发现 ,master的状态下,生成了一个二进制的日志文件,而slave下是空的,所以我们现在就要把主库与从库关联起来。只需要让从库(slave)知道主库(master)的地址就可以了。

    首先我们需要在主库(master)中创建一个用户用于与从库同步的用户名和密码(这里我创建一个test用户,密码为mysql),并给test用户授权,以用于主库操作从库。

    注意:是在主库中建立一个用户(专门用给从库连接的,可别迷迷糊糊的到从库的命令界面敲):

    具体如下:

    相关命令:

    create user test;

    grant replication slave on *.* to '从库用户名(test)'@'从库主机地址(127.0.0.1)'identified by '密码(mysql)';

    flush privileges;   # 刷新权限 

    现在我们切到从库(slave),把主库与从库联系起来。

    执行以下命令:

    change master to master_host='127.0.0.1',master_port=3306,master_user='test',master_password='mysql',master_log_file='master-bin.000015',master_log_pos=120;

    然后执行命令 start slave 开启主从同步,如下图所示:

    stop slave    # 关闭主从同步

    然后执行下列命令查看 slave 的状态

    show slave status G(注意:G后面没有分号的)

    这里出现了错误,如下图所示:

    这里还有uuid的概念,配置mysql主从时,由于是直接拷贝的mysql目录,导致主从mysql uuid相同, Slave_IO无法启动,所以报错,各个数据库的server_uuid得保证不一样,用以下命令分别查看主从数据库的server_uuid

    show variables like '%server_uuid%';

    show variables like 'server_id';    # 查看server_id

    可以看到主从数据库的server_uuid是相同的

    解决方法:

    找到data文件夹下的auto.cnf文件,修改里面的uuid值,保证各个数据库的uuid不一样,修改后重启数据库即可

    再依次执行以下命令:

    stop slave     # 关闭主从同步

    start slave    # 开启主从同步

    show slave status G(注意:G后面没有分号的)    # 查看 slave 的状态

    出现如下图所示,则开启主从跟踪成功

    至此,主从跟踪已经开启,并全部配置完成

    五、验证主从同步

    分别进入主库和从库并查看它们的数据库,然后在主库中创建一个数据库web,看一下从库有没有变化,如下图所示:

     

    至此,主从同步已配置完毕。

    说明:注意不要往从库中写数据,如果从库写入数据,master_log_pos是不会变化的,主库的信息没有发生变化,当主库又变化和从库一样的操作时就有可能会产生冲突,因此,只能在主库中写数据,从库只能读数据,当然主库也可以读数据。

    还有一点,如果想同步主库里在之前就有的数据库的数据,需要手动从主库中导出数据库,然后在从库里再导入,就能同步了。

    六、其他一些相关命令

    查看binlog日志里面的内容

    列表:show master logs

    清空:reset master

    刷新:flush logs

    查看指定日志:show binlog events in '日志键名'

    本文参考自其他博客:

    (1)https://www.cnblogs.com/naruto123/p/8138708.html

    (2)https://www.cnblogs.com/jpfss/p/8143720.html

     

  • 相关阅读:
    javascript平时小例子③(setInterval使用1)
    javascript平时小例子②(正则表达式验证邮箱)
    javascript平时小例子①(移动的小div)
    Ansible主机清单Inventory文件hosts
    K8s Deployment YAML 名词解释
    Linux自带神器logrotate详解
    Redis性能指标监控
    页面无任何操作30秒后退出1
    java 加法变乘法
    java 九数组分数
  • 原文地址:https://www.cnblogs.com/opsprobe/p/10904377.html
Copyright © 2020-2023  润新知