如何用mysql搭配主从数据库

如何用mysql搭配主从数据库,第1张

两台机器,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 多半是网络连接不通,可查看日志文件确认

到此你已经可以实现主从同步了

温馨提示 : 以上弱密码需自行修改


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/bake/11333448.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-15
下一篇 2023-05-15

发表评论

登录后才能评论

评论列表(0条)

保存