两台机器,192.168.162.128(主) 192.168.162.130(从)
配置主的配置文件
vi /etc/my.cnf
grant replication slave on *.* to 'rpl'@'192.168.162.130' identified by '123456'
重启主服务器的MySQL /etc/init.d/mysqld restart
查看master信息: 进入MySQL show master status \G
修改从库配置文件
vi /etc/my.cnf
重启从服务器MySQL,进入MySQL
指定主服务器IP等信息
change master to master_host='192.168.162.128 ',master_user='rpl',master_password='123456',master_log_file='mysql-bin.000001',master_log_pos=647
启动slave :start slave
查看slave状态:show slave status \G
报错Last_IO_Error: Fatal error: The slave I/O thread stops because master and slave have equal MySQL server UUIDsthese UUIDs must be different for replication to work
意思是主和从必须都要有不同的uuid,我们分别去查看下主从的uuid
主:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
查看从库uuid 从库uuid:server-uuid=4e6c5a78-1e9a-11e7-8c65-000c29426312
可以看出是真的一样,原因在于 我是先安装了一个虚拟机并装好MySQL,后面有复制了一遍,作为从服务器,所以导致了这个UUID是一样的。
接下来就是解决这个UUID问题,将从库上的auto.cnf 备份下。然后重启从库。再看下从库的UUID
[auto]
server-uuid=2e9c834a-1eb2-11e7-864b-000c2928472e
再次查看从库状态
从库状态正常了
11.测试主从是否正常
主库上创建一个测试库,test :create database test
创建测试表:
create table test.test(
id int,
username varchar(10)
)ENGINE='innodb'
12.查看从库:
正常,说明主从搭建成功
在配置Mysql数据库主从复制集群的时候要保证:1.主从服务器 *** 作系统版本和位数一致。
2.Mysql版本一致。
为了保证稳定性,最好服务器 *** 作系统和Mysql数据库环境一致。
CentOS服务器上Mysql的安装方法可以参见博客:
http://blog.csdn.net/jhq0113/article/details/43812895
服务器配置:
Master:192.168.1.18
Slave:192.168.1.16
Master(192.168.1.18)服务器:
1.编辑/etc/my.cnf
[root@jhq0229 ~]# vim /etc/my.cnf
2.配置
[plain] view plain copy print?
[mysqld]
datadir=/data/mysql
socket=/var/lib/mysql/mysql.sock
user=mysql
#主从复制配置
innodb_flush_log_at_trx_commit=1
sync_binlog=1
#需要备份的数据库
binlog-do-db=orders
#不需要备份的数据库
binlog-ignore-db=mysql
#启动二进制文件
log-bin=mysql-bin
#服务器ID
server-id=1
# Disabling symbolic-links is recommended to prevent assorted security risks
symbolic-links=0
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
若没有配置binlog-do-db和binlog_ignore_db,表示备份全部数据库。
3.重启Mysqld服务
[root@jhq0229 ~]# service mysqld restart
4.为从Mysql创建用户
登录
[root@jhq0229 ~]# mysql -uroot -p
Enter password:
创建用户
mysql>create user 'mastj'@'192.168.1.16' identified by '123456'
配置主从复制权限
mysql>grant replication slave on *.* to 'mastj'@'192.168.1.16' identified by '123456'
若orders数据库中已经有数据,还需要:
锁定数据库
mysql>flush tables with read lock
将数据导入到从数据库,方法有多种,我是用Navicat复制的,复制完成后:
查看master状态并解锁:
[html] view plain copy print?
mysql>show master status
+------------------+----------+--------------+------------------+-------------------+
| File | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |
+------------------+----------+--------------+------------------+-------------------+
| mysql-bin.000003 | 2005 | orders | mysql| |
+------------------+----------+--------------+------------------+-------------------+
1 row in set (0.00 sec)
mysql>unlock tables
Slave(192.168.1.16)服务器:
1.配置服务ID
[root@jhq0113 ~]# vim /etc/my.cnf
在[mysqld]下面加入
server-id=2
重启Mysql服务
[root@jhq0113 ~]# service mysqld restart
2.配置复制
登录mysql
[root@jhq0113 ~]# mysql -uroot -p
执行
mysql>change master to master_host='192.168.1.18',
master_user='mastj',
master_password='123456',
master_port=3306,
master_log_file='mysql-bin.000003',
master_log_pos=2005,
master_connect_retry=10
参数详解:
master_host:主服务器的IP。
master_user:配置主服务器时建立的用户名
master_password:用户密码
master_port:主服务器mysql端口,如果未曾修改,默认即可。
master_log_file:日志文件名称,填写查看master状态时显示的File
master_log_pos:日志位置,填写查看master状态时显示的Position
master_connect_retry:重连次数
启动进程
mysql>start slave
检查主从复制状态
[plain] view plain copy print?
mysql>show slave status\G
*************************** 1. row ***************************
Slave_IO_State: Waiting for master to send event
Master_Host: 192.168.1.18
Master_User: mastj
Master_Port: 3306
Connect_Retry: 10
Master_Log_File: mysql-bin.000003
Read_Master_Log_Pos: 2369
Relay_Log_File: jhq0113-relay-bin.000002
Relay_Log_Pos: 647
Relay_Master_Log_File: mysql-bin.000003
Slave_IO_Running: Yes
Slave_SQL_Running: Yes
若Slave_IO_Running和Slave_SQL_Running均为Yes,则表示连接正常。
此时就可以测试主从复制了。
从库生成两个线程,一个I/O线程,一个SQL线程;
I/O线程去请求主库 的binlog,并将得到的binlog日志写到relay log(中继日志) 文件中;
主库会生成一个 log dump 线程,用来给从库 I/O线程传binlog;
SQL 线程,会读取relay log文件中的日志,并解析成具体 *** 作,来实现主从的 *** 作一致,而最终数据一致;
1、设置主/从服务器配置
2、创建主/从服务器容器
此处为尽量排除版本不一致导致各种未知问题,所以采用docker构建部署MySql
3、登录主服务器的mysql,查询master的状态
Slave_IO_State 提示:Waiting for master to send event 就是成功了,可在主库添加或修改数据,在到从库查看是否同步
Connecting to master 多半是网络连接不通,可查看日志文件确认
到此你已经可以实现主从同步了
温馨提示 : 以上弱密码需自行修改
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)