在windows环境下搭建主从|主主
如果原来有mysql
可以先把原数据库进行备份防止数据丢失
在cmd界面进入到mysql文件的bin目录
执行以下语句,导出sql语句
mysqldump.exe -h localhost -uroot -p affairs > D:/shop.sql
1)需要配置环境变量,并停用以前的mysql环境变量
2)复制新的mysql中的my-default.ini为my.ini作为配置文件
3)进入新的上一步的my.ini添加配置
-
在[mysqld]下配置
#端口号 port 3307 #安装目录 basedir=D:\mysql_server_5.6.24 #运行目录 datadir=D:\mysql_server_5.6.24\data #日志配置 如果配置此项需要事先将目录建好 log-error=D:\MysqlServer5.6\logs\error.log log=D:\MysqlServer5.6\logs\mysql.log long_query_time=2 log-slow-queries=D:\MysqlServer5.6\logs\slowquery.log
以管理员权限打开cmd
如果之前打开过cmd需要重新关闭重新打开
跳转到mysql的bin目录 安装mysqld -install (服务器上只有一个mysql的情况)
如果有mysql,需要执行以下命令指定配置文件目录
D:\Mysql_Server_5.6.24\bin>mysqld.exe install mysql2 --defaults-file="D:\Mysql_Server_5.6.24\my.ini" 如果成功会有以下提示: Service successfully installed.
然后重启新的mysql2
D:\Mysql_Server_5.6.24\bin>net start mysql2
net start mysql 启动mysql服务
net stop mysql 停止mysql服务
(此配置可以不添加)Windows 添加服务: [ 防止2个mysql服务冲突 ]
( 安装路径)
sc create mysql2server binPath= "E:\MysqlServer5.6\bin\mysqld.exe"
(是否自动开启)
TYPE= "own" start= "auto"
TAG= "no" Display
Name= "mysql2server SERVICES
配置主从
1,添加一个mysql主从复制需要的用户账号
在数据库中 新建查询中使用
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.*
TO mysql_backup@'%'
IDENTIFIED BY '123456';
刷新权限
flush privileges;
删除从服务器的用户只留下一个用户root
刷新权限
flush privileges;
2,配置主服务器
mysql配置文件加入:
server-id=1(必须要有 为服务器A的id)
log-bin=mysql-bin(二进制便跟日志)
binlog_ignore_db=mysql # mysql这个库不同步
binlog_do_db=test # 要同步的数据库(可不填)
重启master,reset master 慎用:会清空所有的日志文件
运行
SHOW MASTER STATUS 加\G 会输出以下格式
输出如下:
3,配置从服务器在从服务器的mysql配置中
port = 3307
log_bin = mysql-bin
server_id = 2(服务器B的id)
relay_log = mysql-relay-bin(中继日志)
read_only = 1 (设置权限 只有查的权限)
在数据库中 从服务器新建查询
停止从库
stop slave status
连接主库
CHANGE MASTER TO master_host = '127.0.0.1',
master_user = 'mysql_backup',(账号)
master_password = '123456',(密码)
master_log_file = 'mysql-bin.000001',
master_log_pos = 120 (这两个可以再主库中 执行 show master status 看到)
启动从库
start salve
查看从库状态
show slave status
如果io线程 与 sql线程 都是yes 就完成了
配置主主
在你上一次搭建的端口号为3307的 mysql 服务器 与上次同样方式添加一个用户账户
GRANT REPLICATION SLAVE,RELOAD,SUPER ON *.* TO mysql_backup@'%'
IDENTIFIED BY '123456';
修改配置文件
MASTER1:
[mysqld]
# for repl
server-id = 1
log-bin = mysql-bin
auto-increment-increment= 2 # 应设为整个结构中服务器的总数
auto-increment-offset = 1 # 设定数据库中自动增长的起点,避免两台服务
器数据同步时出现主键冲突
MASTER2:
[mysqld]
# for repl
server-id = 2
log-bin = mysql-bin
auto-increment-increment= 2
auto-increment-offset = 2
配置主库
master1上指定master2为主:
CHANGE MASTER TO master_host = '192.168.1.201',
master_user = 'mysql_backup',
master_password = '123456',
master_log_file = 'mysql-bin.000001',
master_log_pos = 106;
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
master2上指定master1为主:
CHANGE MASTER TO master_host = '192.168.1.200',
master_user = 'mysql_backup',
master_password = '123456',
master_log_file = 'mysql-bin.000001',
master_log_pos = 106;
Query OK, 0 rows affected (0.18 sec)
mysql> START SLAVE;
Query OK, 0 rows affected (0.00 sec)
如果已经配置了主从再在原来的从服务器上在配置主主,只需要在从服务器上执行上面的一步,原主服务器无需再行配置为主;
其他步骤和上面的配置主从一样只不过这次是从服务器为主服务器配置方式一样。
如果两个mysql版本冲突会出现1236错误,只需在高版本服务器上增加如下:
binlog_checksum=none #不检测日志文件格式mysql
查看从库状态
show slave status
如果io线程 与 sql线程 都是yes 就完成了
测试主主复制
实验1:
启动两个服务,在任一mysql上进行操作,在另一mysql上均能体现出来。
注: MySQL的主主复制实际上就是双向的主从复制。