mac下配置多实例mysql的主从服务器同步

闲着无聊,想尝试下读写分离设计。 这里仅探究mac下多个实例共享一个配置文件的搭建,并实现两个实例间的数据同步。

安装Mysql服务器

  1. 服务器下载:mysql官网(https://www.mysql.com/)下载社区版服务器。本文用到的环境和版本分别是:mac os 10.13.2,mysql 5.7.18 Community (GPL)
  2. 安装的默认路径为:/usr/local/mysql
  3. 将mysql的安装路径设置到环境变量中 vim ~/.bash_profile
 export PATH=$PATH:/usr/local/mysql/bin
 export PATH`

:wq保存退出后,source ~/.bash_profile使配置立即生效。

数据准备

  1. 创建用于主从同步的两个实例(一主一从),分别占用商品3307和3308端口(如果需要多配置多个实例(一主多从),依次添加端口即可,前提是端口未被占用)
  2. 分别为每个实例创建用于存放数据和日志的文件夹。这里把主库文件夹命名为msyql_3307,从库全名为mysql_3308,下面分别都有data文件夹和log文件夹。如下图所示。
    命令行同时创建多个文件夹里插入图片描述
  3. 分别为主从两个实例初始化数据。数据初始化若不成功,则无法启动mysql服务。以下以初始化主库(mysql_3307)为例进行初始化。
mysqld --basedir=/usr/local/mysql --datadir=/usr/local/mysql/mysql_3307/data --initialize
  1. 操作完成后,在/usr/local/mysql/mysql_3307/data目录下生成mysql的相关系统数据库。并会生成一个临时密码(这个密码需要记下来,否则你需要重新操作这一步)。若在上面的命令中带参数–initialize-insecure , 则会产生空白密码。
  2. 同样的方法完成从库(mysql_3308)的数据初始化。

配置多个实例

  1. mysql通过mysqld_multi工具来实现多个实例的管理。该工具在安装目录的bin文件夹中。
  2. 跟单个的mysql服务器的配置不同的是,需要将多个实例的配置参数写一个配置文件中,也就是多实例共享一个配置文件。
  3. 在/etc下文件夹下创建名为my_multi.cnf的配置文件
touch my_multi.cnf
  1. 编辑该文件, 该配置文件需要添加[mysqld_multi]节,用于启动和管理多实例的工具。
    在这里插入图片描述
    由于主从同步是通过二进制日志文件进行数据传送,所以在配置文件中一定要开启二进制日志。也就是上图中log-bin的参数项。(建议先学习mysql的二进制日志的数据恢复等相关知识)。
  2. 复制[mysqld3307]节的配置项,把3307改成3308,完成从实例的配置。
    在这里插入图片描述
  3. 保存my_multi.cnf配置文件。
  4. 启动主从mysql实例服务器。mysql在mac中默认的配置文件名为my.cnf,这里我们用的是my_multi.cnf,因此使用mysqld_multi工具启动服务时,需要带defaults-file参数。指名加载的配置文件。start参数表示启动。如下图。在这里插入图片描述
  5. 启动成功后,可以使用mysqld_multi命令的report参数,查看两个实例是否都运行。在这里插入图片描述
    从上图可以看出两个实例都处于运行状态。
    ps: 在实验过程中,如果这一步启动没成功,可以查看对应实例data文件下的err错误日志。我遇到的问题是数据文件ibdata1需要写权限
    在这里插入图片描述
    这时开启权限data文件夹写的权限就好了。
  6. 若想停止多个实例的运行,只需要将mysqld_multi工具带参数stop即可。发吓图。在这里插入图片描述
  7. 如果想启动单个实例的时候,只需要在start带上3307或3308的字样.
mysqld_multi --defaults-file=/etc/my_multi.cnf start 3307
  1. 启动成功后,根据前面配置文件的设置,在/tmp目录下会生成mysql_3307.sock和mysql_3308.sock的套接字文件。

登录主服务器,设置允许从数据库访问的用户名和权限

  1. 登录到mysql_3307实例(主服务器)
mysql -uroot -S /tmp/mysql_3307.sock -p

输入初始化数据时记下的密码。
2. 由于前面产生的是临时密码,第一次登录时需要修改密码。当然如果你记得那个复杂的密码也是可以的。我这里好像强制需要改密,系统默认认为这个临时密码是过期的。
3. 修改密码的sql语句

alter user 'root'@'localhost' identified by 'newpwd';
  1. 如果想用图形方式来管理实例,这里用的图形工具是navicat。在navicat中创建连接中,在选择高级选项卡,勾选 使用指定的套接字文件,就OK了。
    在这里插入图片描述
  2. 用修改好的密码重新登录主服务器。
  3. 主服务器中添加一个用于主从之间通信的用户并授权。
#创建用户'backup'@'192.168.1.%',登录密码为123,授予所有文件权限及复制权限
grant file on *.* to 'backup'@'192.168.%.%' identified by '123';
grant replication slave on *.* to 'backup'@'192.168.%.%' identified by '123';
  1. 当然要保证主服务器开启了二进制日志。可以使用以下命令相看。
show variables like 'log_bin';

结果为ON则表示开启。

登录从服务器,设置访问主数据库的相关参数

  1. 登录到mysql_3308实例(从服务器),跟主服务器登录和改密方式相同。
  2. 打开到系统数据库mysql。
    在这里插入图片描述
  3. 使用change master to …命令,设置主服务语通信的相关参数,包括用户名、密码、访问端口、地址、日志文件、延时等属性。该命令的帮助说明
    在这里插入图片描述
  4. 设置从数据库的change master to 命令
#这里设置了这些参数
CHANGE MASTER TO MASTER_HOST = '192.168.0.100', MASTER_USER = 'backup', 
MASTER_PASSWORD = '123', MASTER_PORT = 3307, 
MASTER_RETRY_COUNT = 0, MASTER_HEARTBEAT_PERIOD = 10000; 

  1. 开启从服务器
start slave   #开启从服务器

到此所有的配置就完成了。

同步实现

现在你在3307主数据库中创建数据库、创建表还有数据添加、删除和修改,你会发现3308中都会同步出来。
心动的操作我就不呈现了,赶紧试试吧。
如果在提供数据服务时,主数据库用来提供数据更新,而从数据库用来提供数据查询的话,在配置文件中my_multi.cnf文件中,可以对从实例配置为readonly=1,以表示该服务器仅用于读。

参考资料:
https://www.jianshu.com/p/30d504d0ee50

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值