linux mysql主从复制配置

时间:2021-08-10 02:15:19

1、设置主库master的servie-id值并且开启bin-log功能参数
vi /etc/my.cnf
修改my.cnf的参数:
[mysqld]
server-id=1 //每一个库的server-id必须都不一样
log-bin=mysql-bin

2、检查参数是否成功设置并重新启动
egrep "server-id|log-bin" /etc/my.cnf
重启命令见:mysql安装或mysql数据库多实例

3、登录数据库检查参数的更改情况
show variables like 'server_id';
show variables like 'log_bin';

4、在主库上建立用于从库复制的账号
从库要想从主库复制数据,必须要有一个主库的账号允许从库访问
mysql -uroot -p'zjl123' 
mysql> grant replication slave on *.* to 'rep'@'10.0.0.%' identified by 'zjl123';
mysql> flush privileges;
这里*.*表示所有数据库的所有表,也可以指示某个数据库的某个表
rep 为同步的账号,10.0.0.% 为授权的主机网段,使用了%表示允许整个10.0.0.0的网段可以访问rep用户
replication slave 就是主从复制需要的权限

5、检查主库创建的rep复制账号是否成功
mysql>select user,host from mysql.user;
mysql>select user,host from mysql.user where user = 'rep';
mysql>show grants for rep@'10.0.0.%';

实现对主库锁表只读,用于备份主库的数据到从库,使同步前数据一致,锁表时如果超过设置时间不操作会自动解锁
6、数据库锁表并查看自动解锁时长参数:
mysql>flush table with read lock;
show variables like '%timeout%'

7、查看主库当前binlog文件名和备份点,从库请求复制时就从这个点开始
mysql>show master status;
或者
mysql -u root -p 'zjl123' -e "show master status"

锁表后一定要单开一个SSH窗口,导出主库数据,如果数据很大(50G以上),并且允许停机,可以停库直接打包数据文件进行迁移,那样更快。
8、备份主库数据:
mkdir /server/backup/ -p
mysqldump -u root -p 'zjl123' --events -A -B |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
ls -l /server/backup/mysql_bak.$(date +F%).sql.gz
或者:
mysqldump -u root -p 'zjl123' --events -A -B -x --master-data=1 |gzip >/server/backup/mysql_bak.$(date +%F).sql.gz
--master-data=1参数会在备份数据里增加如下语句
--position to start replication or point -in-time recovery from change master to master_log_file='mysql-bin-000005',master_log_post=107;
此时从库在change master 时就无需指定binlog文件名和位置了,因为在备份时已经备份了该语句

9、为了确保导出数据期间数据库没有数据插入,导库完毕时可以再次检查主库的状态信息,结果如下:
mysql -u root -p 'zjl123'  -e "show master status"
若无特殊情况,binlog文件及位置点和锁表后导出数据前是一致的

10、开锁数据库表
mysql>unlock tables;

以下是从库上执行的操作
11、设置server-id值并关闭binlog功能
数据库的server-id一般在一套主从复制体系内是唯一的,这里从库的server-id要和主库及其他的从库的不同,并且要注释掉从误国的binlog参数配置,如果从库不需要做级联复制,并且不做备份用,就不需要开启binlog功能,开启了反而会增加从库磁盘的i/o压力。
但是,有以下两种情况需要打开从库的binlog功能,记录数据库更新的sql语句:
1、作为形如:A-->B-->C这样的级联同步,中间的B数据库,就要开启binlog功能。
2、在从库需要备份时要开启binlog功能,因为数据库备份必须要有,全备和binlog日志,才是完整的备份。

12、把主库msqldump的数据导入到从库
cd /server/backup/
ls -l
ll
mysql -uroot -p'zjl123' -S /data/3307/mysql.sock < mysql_bak.2015-07-27.sql
提示:如果备份时用了-A参数,则在还原到3307的时候,登录3307实例的密码也会和3306主库的一致,因为3307实例的授权表mysql也被覆盖了。

13、登录3307数据库后,配置复制参数
CHANGE MASTER TO
MASTER_HOST='10.0.0.7', #主库的IP
MASTER_PORT=3306, #主库的端口
MASTER_USER='rep', #主库上建立的用于复制的用户rep
MASTER_PASSWORD='zjl123', #rep的密码
MASTER_LOG_FILE='mysql-bin.000008', #binlog二进制文件 的名称
MASTER_LOG_POS=342; #binlog二进制文件 的偏移量,即复制开始点

以上命令需要登录mysql之后在mysql里执行

也可以通过不登录数据库的内部命令行实现,如在命令行中输入命令如下:
mysql -uroot -p'zjl123' -S /data/3307/mysql.sock<< EOF
CHANGE MASTER TO
MASTER_HOST='10.0.0.7',
MASTER_PORT=3306,
MASTER_USER='rep',
MASTER_PASSWORD='zjl123',
MASTER_LOG_FILE='mysql-bin.000008',
MASTER_LOG_POS=342;
EOF

上述的操作原理是把用户、密码、主库端口、IP等信息写入从库的master.info文件中。
查看写入结果如下:
ll /data/3307/data/master.info
cat /data/3307/data/master.info

14、启动从库同步开关,并查看同步状态
mysql -uroot -p'zjl123' -S /data/3307/mysql.sock -e "start slave;"
mysql -uroot -p'zjl123' -S /data/3307/mysql.sock -e "show slave status\G;"

主从复制是否成功主要看以下3项的状态
mysql -uroot -p'zjl123' -S /data/3307/mysql.sock -e "show slave status\G;"|grep "IO_Running|SQL_Running|_Behind_Master"
分别应该显示的内容为: yes yes 0

Slave_IO_Running: yes 这个是IO线程状态,IO线程负责从从库到主库读取binlog日志,并写入从库中继日志,状态为yes表示IO线程工作正常。

Slave_SQL_Running: yes 这个是SQL线程状态,SQL线程负责读取中继日志(relay-log)中的数据并转换为SQL语句应用到从数据库中,状态为yes表示sql线程工作正常。

Seconds_Behind_Master: 0,这个是复制过程中从库比主库延迟的秒数,这个参数很重要,但企业时更准确的判断主从复制延迟的方法为:在主库写时间戳,然后从库读取时间戳,和当前数据库时间进行比较,从而认定是否有延迟。

以上是主从复制的全部内容,测试主从复制,只需要在主库做修改操作,查看从库中是否做出了相同的改变即可。

15、查看mysql主从复制I/O线程状态
mysql>show processlist\G

16、问题一
当主库语句在从库执行时产生了冲突时,比如主库创建了一张表,从库已经存在该名称的表,就会创建不成功,这时候,主从同步就无法继续进行
解决:
show slave status\G
stop slave; #临时停止同步形状
set global sql-slave-skip-counter=1; #将同步指针移动一个,如果还不能同步,可以重复该操作
start slave;
set global sql-slave-skip-counter=n;#n>0,忽略执行n个更新
解决二:
可以根据错误号事先在配置文件中配置,跳过指定的不影响业务数据的错误,例如:
grep slave-skip /data/3306/my.cnf
slave-skip-errors = 1032,1062,1007

17从库需要记录binlog日志的方法:
在从库的my.cnf中加入如下参数,然后重启服务即可
log-slave-updates #必须要有这个参数
log-bin=/data/3307/mysql-bin
expire_logs_days=7 #相当于find /data/3307/ -type f -name " mysql-bin.000*" -mtime +7 | xargs rm -f

linux mysql主从复制配置的更多相关文章

  1. Linux Mysql数据库安全配置

    Linux  Mysql数据库安全配置 目录: 1.修改mysql管理员账号root的密码(2种方法) 2.修改mysql管理员账号root 3.mysql管理员root账号密码遗忘解决办法(2种方法 ...

  2. MYSQL主从复制配置(整理)

    MYSQL主从原理及过程 原理 Mysql的 Replication 是一个异步的复制过程(mysql5.1.7以上版本分为异步复制和半同步两种模式),从一个 Mysql instace(我们称之为 ...

  3. Linux 笔记 - 第二十三章 MySQL 主从复制配置

    一.前言 MySQL Replication,也被称为主从复制.AB 复制.简单来说就是 A 和 B 两台服务器做主从后,在 A 服务器上写入数据,B 服务器上也会跟着写入输入,两者之间的数据是实时同 ...

  4. linux mysql主从复制

    centos7 安装 mariadb 1 yum 源  -- 配置阿里的 2 rmp 方式 3 源码编译方式  -- 专业DBA 一些知识点: 虚拟环境 不影响 redis/ mariadb/mysq ...

  5. mysql主从复制配置

    使用mysql主从复制的好处有: 1.采用主从服务器这种架构,稳定性得以提升.如果主服务器发生故障,我们可以使用从服务器来提供服务. 2.在主从服务器上分开处理用户的请求,可以提升数据处理效率. 3. ...

  6. mysql主从复制配置(精简版)

    一.首先准备两台服务器,虚拟机即可,以笔者为例:master:192.168.1.105 slave:192.168.1.106 二.保证两台虚拟机能相互ping通,先把防火墙关闭:service i ...

  7. 一&period;Mysql主从复制配置

    在我之前的文章四·安装mysql-5.7.16-linux-glibc2.5-x86_64.tar.gz(基于Centos7源码安装 和 九.mysql数据库多实例安装mysqld_multi [st ...

  8. Mysql学习总结(14)——Mysql主从复制配置

    mysql主从复制 怎么安装mysql数据库,这里不说了,只说它的主从复制,步骤如下: 1.主从服务器分别作以下操作:   1.1.版本一致   1.2.初始化表,并在后台启动mysql   1.3. ...

  9. windows10 mysql主从复制配置

    注意:mysql主从复制,主从版本要一致! 生手永远在学习的路上,为了学习mysql主从复制,实现读写分离,于是在本地安装多个mysql实例来进行验证. 也因此有了下面的笔记,一来自我总结一下经验,二 ...

随机推荐

  1. heading python decorator

    decorator make a wrapper function do something before and after the original function. The wrapper f ...

  2. div&plus;css 遮罩层

    CSS样式部分: ---------------------------------- <style type="text/css">#loading-mask{    ...

  3. c&plus;&plus; 哪些自定义的数据类型

    http://www.cnblogs.com/ShaneZhang/archive/2013/06/21/3147648.html 这些数据类型是 C99 中定义的,具体定义在:/usr/includ ...

  4. BZOJ2253&colon; &lbrack;2010 Beijing wc&rsqb;纸箱堆叠

    题解: 其实就是求三维偏序最长链.类似于三维逆序对,我们可以用树状数组套平衡树来实现. DP方程 :f[i]=max(f[j]+1) a[j]<a[i] 我们按一维排序,另一位建立树状数组,把第 ...

  5. scp输入密码问题

    今天查看预发布项目是发现一个问题,代码中使用了ganymed-ssh2-262.jar执行scp远程copy,但发现没有成功,没报错,程序阻塞了 狂搜...郁闷的是按照网上说的,做了几遍但是没成功,没 ...

  6. &lbrack;mac git 服务器端&rsqb;

    http://blog.csdn-net/kesalin/article/details/6943770 XCode 4 默认支持 Git 作为代码仓库,当我们新建一个仓库的时候,可以勾选创建默认仓库 ...

  7. Knight Moves(BFS&comma;走’日&OpenCurlyQuote;字)

    Knight Moves Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Tota ...

  8. ImageSpan图片不能居中的问题

    点击下载:MyImageSpan.txt 使用ImageSpan的童鞋应该都会遇到这样一个困惑,图片不能居中显示,ImageSpan中只有ImageSpan.ALIGN_BASELINE与ImageS ...

  9. dos2unix批量转换的一种方法

    Linux本身提供了dos2unix和unix2dos两个命令来实现Windows和Linux文件的转换. 少量文件转换: 对于单个或少量的文件转换,可以直接使用命令,如: dos2unix file ...

  10. java虚拟机 jvm 方法区实战

    和java堆一样,方法区是一块所有线程共享的内存区域,用于保存系统的类信息,类的信息有哪些呢.字段.方法.常量池.方法区也有一块内存区域所以方法区的内存大小,决定了系统可以包含多少个类,如果系统类太多 ...