目前很多电商在使用mysql作为存储数据的载体,很多时候频繁查询数据库会有一些性能瓶颈,这时,采用mysql集群是一个好的选择,今天记录下关于mysql的主从复制问题。
我的mysql版本是5.6.37(root,123456),系统环境windows10,由于是在自己机器上搭建的,所以IP统一设置成127.0.0.1,如果是搭建在真实环境下的话,IP换成真是IP即可。
【windows下安装多个mysq服务】
1.下载mysql5.6.37压缩包;
2.解压缩,放到某个盘下(我放在 D:\API\mysql5.6.37 , D:\API\mysql5.6.37.2),这里放了两个文件夹,前者做主库,负责读写,后者作为从库,只负责读取数据;
3.编辑主库的my.ini文件(将my-default.ini改名为my.ini),编辑内容如下:
[mysqld]
basedir = D:\API\mysql5.6.37
datadir = D:\API\mysql5.6.37\data
port = 3306
server_id = 1
log_bin = mysql-bin
binlog-do-db = sampledb
4.编辑从库的my.ini文件(将my-default.ini改名为my.ini),编辑内容如下:
[client]
port=3307
default-character-set=utf8
[mysqld]
basedir = D:\API\mysql5.6.37.2
datadir = D:\API\mysql5.6.37.2\data
port = 3307
server_id = 2
replicate-do-db = sampledb
character_set_server=utf8
default-storage-engine=MYISAM
5.注册主库mysql服务,以管理员身份运行cmd.exe,进入到 D:\API\mysql5.6.37 \bin目录下,mysqld -install MYSQL;
6.注册从库mysql服务,以管理员身份运行cmd.exe,进入到 D:\API\mysql5.6.37.2 \bin目录下,mysqld -install MYSQL3307,注册从库成功后需要修改ImagePath,
HKEY_LOCAL_MACHINE-->SYSTEM-->CurrentControlSet-->Services
找到刚才创建的MySQL2,将ImagePath修改成如下":
"D:\API\mysql5.6.37.2 \bin\mysqld" MySQL3307
【主从数据库下操作】
1.以管理员身份运行cmd.exe,进入主库的bin目录下,mysql -u root -p 123456,回车,grant replication slave,reload,super,create,select,insert,update,delete on *.* to dog@'127.0.0.1' Identified by "123";创建dog用户,密码123,并且给予主从复制权限和其他权限,show master status;查看日志的情况(后面从库开始同步需要用到);
mysql> show master status;
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000010 | 665 | sampledb | | |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
2.以管理员身份运行cmd.exe,进入从库的bin目录下,mysql -u root -p 123456,回车(如果没有密码的话,建议更改下密码,安全,模拟真实场景嘛),
change master to master_host='127.0.0.1',master_user='dog',master_password='123', master_log_file='mysql-bin.000010',master_log_pos=665;
设置完之后,执行 mysql> start slave;
开启slave线程;执行mysql> show slave status\G
关注
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
都是YES,表示成功
此时,可用navicate工具链接dog用户和从库的root用户,在dog用户下已有数据库sampledb下创建表,然后插入记录,可在从库的root下看到同步过去了
注意:最好是先用主库和从库root用户创建好需要的数据库,然后在主库下show master status记录日志的位置,再在从库下设置同步开始,生产上一般也是给你创建,删除,更新操作权限,很少给建库权限的,至此主从同步完成