首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >mysql主从复制

mysql主从复制

原创
作者头像
用户1168904
修改于 2021-05-26 10:12:41
修改于 2021-05-26 10:12:41
1.3K0
举报
文章被收录于专栏:运维相关文档运维相关文档

1.系统版本都是rhel5 mysql版本相同

2.主服务器正在运行,不能停止。

3.主服务器IP为:192.168.1.100

从服务器IP为:192.168.1.101

4.从服务器MSYQL slave 为停止状态

配置步骤:

1、主库创建/etc/my.cnf,修改[mysqld]里边的键值增加

server-id=1

log-bin=binlog_name

2、主库增加用户,用于从库读取主库日志。

grant replication slave,reload,super on *.* to'slave'@'192.168.1.101'identified by '123456';

flush privileges;

3、从库连接主库进行测试。

mysql -u slave -p -h 192.168.1.100 //master的IP

4、停从库,修改从库/etc/my.cnf,增加选项:

[mysqld]

server-id=2

master-host=192.168.1.100

master-user=slave

master-password=123456

5.锁表

mysql > FLUSH TABLES WITH READ LOCK;

注意:为了保证FLUSH TABLES语句让读锁定保持有效。(如果退出客户程序,锁被释放)。建立新的SSH连接,然后对主服务器上的数据进行快

照。

6.建立快照

tar -cvf data.tar /var/lib/mysql

将压缩包拷贝过去后解压缩

也可以用scp拷贝过去:

scp -r /var/lib/mysql/* 192.168.1.101:/var/lib/mysql/

注意拷贝过去后权限的设置

chown -R mysql.mysql /var/lib/mysql

数据量大可以用mysqldump导出.

7.解锁

mysql > UNLOCK TABLES;

8.记下file pos值

当FLUSH TABLES WITH READ LOCK所置读锁定有效时,读取主服务器上当前的二进制日志名(file)和偏移量值(pos):

mysql > SHOW MASTER STATUS;

+---------------+----------+--------------+------------------+

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

+---------------+----------+--------------+------------------+

| mysql-bin.003 | 73 | test | manual,mysql |

+---------------+----------+--------------+------------------+

File列显示日志名,而Position显示偏移量。在该例子中,二进制日志值为mysql-bin.003,偏移量为73。记录该值。以后设置从服务器时需要

使用这些值。它们表示复制坐标,从服务器应从该点(也可以是任何点)开始从主服务器上进行新的更新。

9.从服务器执行同步

# mysql>start slave;

# mysql>load data from master;

10.验证配置

登录从服务器输入如下命令:

mysql> show slave status\G;

会得到类似下面的列表:

Slave_IO_Running: Yes

Slave_SQL_Running: Yes

都为yes,则配置正确.

11.进行测试:

主库创建表,

mysql>create database sampdb;

mysql>use sampdb;

mysql>create table new (name char(20),phone char(20));

mysql>insert into new (’abc‘,’0532555555’);

主从服务器重启;

打开从库,查看:

#mysql -u root -p

mysql>show databases; //应该能看到master创建的库sampdb

mysql

sampdb

test

mysql>use sampdb;

mysql>show tables;

new

说明主从数据库创建成功。

附:

一些错误信息的处理,主从服务器上的命令,及状态信息。

在从服务器上使用show slave status\G

Slave_IO_Running,为No,

则说明IO_THREAD没有启动,请执行start slave io_thread

Slave_SQL_Running为No

则复制出错,查看Last_error字段排除错误后执行start slave sql_thread

查看Slave_IO_State字段空 //复制没有启动

Connecting to master//没有连接上maste

Waiting for master to send event//已经连上

主服务器上的相关命令:

show master status

show slave hosts

show logs

show binlog events

purge logs to 'log_name'

purge logs before 'date'

reset master(老版本flush master)

set sql_log_bin=

从服务器上的相关命令:

slave start

slave stop

SLAVE STOP IO_THREAD //此线程把master段的日志写到本地

SLAVE start IO_THREAD

SLAVE STOP SQL_THREAD //此线程把写到本地的日志应用于数据库

SLAVE start SQL_THREAD

reset slave

SET GLOBAL SQL_SLAVE_SKIP_COUNTER

load data from maste

show slave status(SUPER,REPLICATION CLIENT)

CHANGE MASTER TO MASTER_HOST=, MASTER_PORT=,MASTER_USER=, MASTER_PASSWORD= //动态改变master信息

PURGE MASTER [before 'date'] 删除master端已同步过的日志

几个跟热备有关的mysql命令:(需要在mysql命令行界面或query )

* stop slave #停止同步

* start slave #开始同步,从日志终止的位置开始更新。

* SET SQL_LOG_BIN=0|1 #主机端运行,需要super权限,用来开停日志,随意开停,会造成主机从机数据不一致,造成错误

* SET GLOBAL SQL_SLAVE_SKIP_COUNTER=n # 客户端运行,用来跳过几个事件,只有当同步进程出现错误而停止的时候才可以执行。

* RESET MASTER #主机端运行,清除所有的日志,这条命令就是原来的FLUSH MASTER

* RESET SLAVE #从机运行,清除日志同步位置标志,并重新生成master.info

虽然重新生成了master.info,但是并不起用,最好,将从机的mysql进程重启一下,

* LOAD TABLE tblname FROM MASTER #从机运行,从主机端重读指定的表的数据,每次只能读取一个,受timeout时间限制,需要调整timeout时间。执行这个命令需要同步账号有 reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值

* LOAD DATA FROM MASTER #从机执行,从主机端重新读入所有的数据。执行这个命令需要同步账号有reload和super权限。以及对相应的库有select权限。如果表比较大,要增加net_read_timeout 和 net_write_timeout的值

* CHANGE MASTER TO master_def_list #在线改变一些主机设置,多个用逗号间隔,比如

CHANGE MASTER TO

MASTER_HOST='master2.mycompany.com',

MASTER_USER='replication',

MASTER_PASSWORD='bigs3cret'

* MASTER_POS_WAIT() #从机运行

* SHOW MASTER STATUS #主机运行,看日志导出信息

* SHOW SLAVE HOSTS #主机运行,看连入的从机的情况。

* SHOW SLAVE STATUS (slave)

* SHOW MASTER LOGS (master)

* SHOW BINLOG EVENTS [ IN 'logname' ] [ FROM pos ] [ LIMIT [offset,] rows ]

* PURGE [MASTER] LOGS TO 'logname' ; PURGE [MASTER] LOGS BEFORE 'date'

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档