MySQL Replication主要用于MySQL的时时备份或者读写分离。在配置之前先做一下准备工作,配置两台mysql服务器,或者在一台服务器上配置两个端口也可以。

流程示意图:

A-->change data-->bin_log-->transfer-->B-->repl_log-->change data

一、搭建好了一个mysql,跑的是3306端口。

1、下载mysql到/usr/local/src/

wget http://mirrors.sohu.com/mysql/MySQL-5.6/mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

2、解压缩

tar zxvf mysql-5.6.35-linux-glibc2.5-x86_64.tar.gz

3.把解压完的数据移动到/usr/local/mysql

mv mysql-5.6.35-linux-glibc2.5-x86_64 /usr/local/mysql

4.建立mysql用户

useradd -s /sbin/nologin mysql

5.初始化数据库

cd /usr/local/mysql

mkdir -p /data/mysql

chown -R mysql:mysql  /data/mysql

./scripts/mysql_install_db  --user=mysql  --datadir=/data/mysql

6.拷贝配置文件

cp support-files/my-large.cnf   /etc/my.cnf拷贝配置文件

7.拷贝启动脚本文件并修改其属性

cp support-files/mysql.server    /etc/init.d/mysqld

chmod 755  /etc/init.d/mysqld

8.修改启动脚本

vim /etc/init.d/mysqld

需要修改的地方有 “datadir=/data/mysql”

basedir=/usr/local/mysql

9.把启动脚本加入系统服务项,并设定开机启动,启动mysql

chkconfig --add mysqld

chkconfig mysqld on 或service mysqld start或/etc/init.d/mysqld start

检查mysqld是否启动的命令为:ps aux |grep mysqld

二、下面再搭建一个3307端口的mysql:

[root@localhost ~]#  mkdir /data/mysql_slave

[root@localhost ~]# chown -R mt=ysql:mysql /data/mysql_slave

[root@localhost ~]# cd /usr/local/

[root@localhost local]# cp -r mysql mysql_slave

[root@localhost local]# cd mysql2

[root@localhost mysql_slave]#./scripts/mysql_install_db --user=mysql  --datadir=/data/mysql_slave

[root@localhostmysql_slave]# cp /etc/my.cnf  .

[root@localhost mysql_slave]# vim my.cnf

【mysqld】

改为:port = 3307

改为:socket = /tmp/mysql_slave.sock

在这一行的下面再加一行:

datadir= /data/mysql_slave

保存后就可以启动它了:

[root@localhost mysql_slave]# cd bin/

[root@localhost bin]# ./mysqld_safe --defaults-file=../my.cnf --user=mysql &

重启:pid=`ps aux|grep mysql2.sock|grep -v grep|awk '{print $2}'`;kill $pid;cd /usr/local/mysql2/bin/; ./mysqld_safe --default-file=../my.cnf --user=mysql &

若开机启动,需要把启动命令加入到/etc/rc.local中

如果想跟mysqld一样脚本启动,则:

[root@localhost mysql_slave]# cd /etc/init.d/

[root@localhost init.d]# cp mysqld  mysqldslave

vim mysqldslave

改datadir=/data/mysql”    为   datadir=/data/mysql_slave

basedir=/usr/local/mysql 为   basedir=/usr/local/mysql_slave

改conf=/etc/my.cnf            为   conf=$basedir/my.cnf

也可以配置到/etc/init.d/mysqlslave

cp -r mysql mysql_slave

同样修改

basedir=/usr/local/mysql_slave

datadir=/data/mysql_slave

conf=$basedir/my.cnf

后面的conf路径

conf=$basedir/my.cnf

但是不能使用/etc/init.d/mysqlslave start启动

可以使用service mysqlslave start

[root@hardman bin]# chkconfig --add mysqldslave

[root@hardman bin]# chkconfig mysqldslave on

[root@hardman bin]# chkconfig --add mysqld

[root@hardman bin]# chkconfig mysqld on

也可以将写入到/etc/rc.d/rc.local文件中:

echo "./mysqld_safe --defaults-file=../my.cnf --user=mysql &" >>/etc/rc.d/rc.local

三、在主服务器上创建测试数据库:

三、在主服务器上创建测试数据库:

登录两台mysql

mysql -h127.0.0.1 -P3306 #通过主机端口登陆

mysql -h127.0.0.1 -P3307

mysql -S /tmp/mysql.sock #通过sock登陆

mysql -S /tmp/mysql_slave.sock

mysql -uroot -p密码 #通过密码登陆

登录mysql:/usr/local/mysql/bin/mysql -uroot -p199610

或mysql -S  /tmp/mysql.sock

登录mysql_slave:mysql -S  /tmp/mysql_slave.sock  或者mysql -h127.0.0.1 -P3307 (无密)

把3306端口的mysql作为主(master),而把3307的mysql作为从(slave)

为了让实验更加像生产环境,先在master上创建一个库db1

[root@localhost bin]# mysql -uroot -S /tmp/mysql.sock -p199610

mysql> create database db1;

Query OK, 1 row affected (0.01 sec)

mysql> quit

Bye

// -S 后面指定mysql的socket文件路径,这也是登陆mysql的一种方法,因为在一台服务器上跑了两个mysql端口,所以,只能用 -S 这样的方法来区分。

创建了db1库,然后把mysql库的数据复制给它:

mysqldump -uroot -S /tmp/mysql.sock  mysql > 123.sql     #备份

mysql -uroot -S /tmp/mysql.sock db1

设置主master

修改配置文件:

vim /etc/my.cnf

在[mysqld]部分查看是否有以下内容,如果没有则添加:

server-id=1

log-bin=mysql-bin //可以修改为aiker等等

除了这两行是必须的外,还有两个参数,你可以选择性的使用其中一个:

#指定库的主从

#binlog-do-db=db1,db2

#忽略指定库主从,黑名单

#binlog-ignore-db=mysql

binlog-do-db= #需要复制的数据库名,多个数据库名,使用逗号分隔。

binlog-ignore-db= #不需要复制的数据库库名,多个数据库名,使用逗号分隔。这两个参数其实用一个就可以

重启mysql服务:

/etc/init.d/mysqld restart

ls  /data/mysql

查看/data/mysql下,会出现以log-bin值文件:

aiker.000001

设置mysql数据库的root访问密码:

设置密码:mysqladmin -uroot -S /tmp/mysql.sock password '199610'

登录:mysql -uroot -S /tmp/mysql.sock -p'199610'

mysql> grant replication slave on *.* to 'repl'@'127.0.0.1' identified by '123456';

//这里的repl是为slave端设置的访问master端mysql数据的用户,密码为123456,这里的127.0.0.1为slave的ip(因为我们配置的master和slave都在本机)。

mysql> flush privileges;       #刷新

mysql>flush tables with read lock; #锁定数据库,此时不允许更改任何数据

mysql>unlock tables;

mysql> show master status; #查看状态,这些数据是要记录的,一会要在slave端用到

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

| File | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

| aiker.000001 | 587 | | |

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

1 row in set (0.00 sec)

设置slave

先修改slave的配置文件my.cnf:

vim /usr/local/mysql_slave/my.cnf

找到 “server-id = 1” 这一行,删除掉或者改为 “server-id = 2” 总之不能让这个id和master一样,否则会报错。

另外在从上,如下两行,黑白名单,看主mysql有没有配置

replicate-do-db=db1,db2

replicate-ignore-db=db1,db2

改完后,重启slave:

service mysqld_slave restart

拷贝master上的db1库的数据到slave上,因为master和slave都在一台服务器上,所以操作起来简单了很多,如果是不同的机器,可能就需要远程拷贝了,希望你注意这一点:

[root@localhost ~]# mysqldump -uroot -S /tmp/mysql.sock -pyourpassword db1 > 123.sql

[root@localhost ~]# mysql -uroot -S /tmp/mysql_slave.sock -pyourpassword -e "create database db1"

[root@localhost ~]# mysql -uroot -S /tmp/mysql_slave.sock -pyourpassword db1

二行中,-e选项,它用来把mysql的命令写到shell中,这样可以方便把mysql操作写进脚本中,它的格式就是 -e "commond" 它很实用。

把数据拷贝过来后,就需要在slave上配置主从了:

mysql> slave stop;

Query OK, 0 rows affected, 1 warning (0.00 sec)

mysql> change master to master_host='127.0.0.1',master_port=3306,master_user='repl', master_password='123123',master_log_file='aiker.000001', master_log_pos=587;

Query OK, 0 rows affected (0.02 sec)

mysql> slave start;

Query OK, 0 rows affected (0.00 sec)

mysql> show slave status\G

在主mysql上解锁

mysql -uroot -S /tmp/mysql_slave.sock -p123123 -e "unlock tables"

或者

mysql> unlock tables;

Query OK, 0 rows affected (0.00 sec)

3、测试主从

在master上执行如下命令:

[root@hardman bin]# mysql -uroot -S /tmp/mysql.sock -pederew -e "use db1;select count(*) from db"

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

| count(*) |

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

| 2 |

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

[root@hardman bin]# mysql -uroot -S /tmp/mysql.sock -pederew -e "use db1;truncate table db" 清空db1的表

[root@hardman bin]# mysql -uroot -S /tmp/mysql.sock -pederew -e "use db1;select count(*) from db"

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

| count(*) |

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

| 0 |

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

[root@hardman ~]# mysql -S /tmp/mysql_slave.sock -e "use db1;select count(*) from db"

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

| count(*) |

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

| 0 |

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

slave上的该表也被清空了。这样好像不太明显,不妨继续把db表删除试试:

[root@hardman ~]# mysql -S /tmp/mysql_slave.sock -e "use db1;select count(*) from db"

ERROR 1146 (42S02) at line 1: Table 'db1.db' doesn't exist

主从配置起来很简单,但是这种机制也是非常脆弱的,一旦我们不小心在从上写了数据,那么主从也就被破坏了。另外如果重启master,务必要先把slave停掉,也就是说需要在slave上去执行 slave stop 命令,然后再去重启master的mysql服务,否则很有可能就会中断了。当然重启完后,还需要把slave给开启 slavestart.

mysql replication slave_MySQL Replication 即主从复制相关推荐

  1. mysql replication slave_MySQL Replication,主从同步( Master-Slave)

    转载自:http://lizhao6210-126-com.iteye.com/blog/1716485 MySQL的Replication是一种多个MySQL的数据库做主从同步的方案,特点是异步,广 ...

  2. mysql skip slave_MYSQL replication slave-skip-errors 详解

    建用户的时候报告这个错误,原因是mysql中已经有了这个用户,可以从mysql.user中直接删除,然后刷新权限,再建用户就不会有这个问题了.如果是drop user先,那么mysql内部应该会自动刷 ...

  3. mysql克隆master_科学网—Windows下Mysql的Master-Slave Replication主从复制配置 - 刘洋的博文...

    最近做mysql的主从服务器(master-slave)复制,折腾了半天才搞定,记录一下完整的过程:就用局域网数据替代我的操作,比如:slaveip为从服务器ip,192.168.2.3:master ...

  4. 宋利兵 mysql_《MySQL 5.7 Replication新特性》分享之互动问题解答

    分享主题 <MySQL 5.7 Replication新特性> 嘉宾介绍 宋利兵,MySQL研发工程师.2009年加入MySQL全球研发团队,从事MySQL复制相关功能的开发. 主题介绍 ...

  5. mysql dwith ssl_mysql replication支持ssl(一主一从)

    由于mysql的主从复制是明文传送的,但如果在生产环境中跨网络我们使用的主从还是明文传送的话, 就保证不了数据的安全性,为了解决这一问题, 我们需要加密进行传送,也就是基于SSL的加密方法进行传输数据 ...

  6. 账户系统db服务器为创建快照,Mysql 服务器同步(replication)设置.docx

    Mysql 服务器同步(replication)设置 Mysql 服务器同步(replication)设置MySQL支持单向.异步复制,复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服 ...

  7. Galera replication for MySQL(包括Galera replication原理)

    Galera replication for MySQL(包括Galera replication原理) 原文  http://www.gpfeng.com/?p=603 转自:http://blog ...

  8. mysql主主复制、主从复制、半同步的实现

    实验前提:两台服务器 Master server:172.16.23.1 slave server:172.16.23.2 一.mysql主从服务器实现 简单介绍: MySQL支持单向.异步复制,复制 ...

  9. MySQL基于SSL协议的主从复制

    数据对于大部分公司来说都是最重要的部分,而MySQL的服务器在同步数据时,默认是使用明文进行传输,所以接下来就来说说MySQL基于SSL协议进行密文传输数据的主从复制模式. 逻辑拓扑: 接下来的实验中 ...

最新文章

  1. 医疗影像处理:去除医疗影像中背景的影响2D/3D【numpy-code】| CSDN博文精选
  2. 【软件工程-Teamwork 3】团队角色分配和团队贡献分分配规则
  3. Json模块dumps、loads、dump、load函数介绍
  4. 【Android 内存优化】Bitmap 内存缓存 ( Bitmap 缓存策略 | LruCache 内存缓存 | LruCache 常用操作 | 工具类代码 )
  5. Unable to start activity ComponentInfo{com.first/com.first.Game}
  6. 多媒体计算机属于哪种教学,多媒体计算机属于哪种教学媒体(???)。
  7. C++11并发实战(专栏)
  8. bzoj 3585 mex
  9. 密码编码学之数字签名
  10. Java 蓝桥杯 芯片测试
  11. 米斯特白帽培训讲义(v2)漏洞篇 第三方风险
  12. Java实现pow共识算法_POW+POS混合共识算法
  13. #CSP 201403-1 相反数(100分)
  14. 关于H264相关的EBSP,RBSP,SODP的说明
  15. 在windows 2003系统上安装诺基亚pc套件以及笔记本通过PC套件上网
  16. 手机锁屏密码忘了怎么办 锁屏密码破解法
  17. MacVim配置文件
  18. cesium 矢量图 编辑_openlayers添加、删除矢量图,多边形
  19. 《众妙之门——网页排版设计制胜秘诀》——导读
  20. Vue3项目报错[vue/no-template]

热门文章

  1. Appium调试问题:java.lang.SecurityException
  2. Android调用系统软键盘删除键 以达到删除输入框里面emoji表情的功能
  3. 十分好用的跨浏览器测试工具,建议收藏!!!
  4. UTF-8编码下PHP全角符号替换成半角
  5. 成为wifi驱动工程师应该从什么开始学习
  6. mysql开启审计日志
  7. 如何从零开始学习自动化
  8. 期货投资最低需要多少资金
  9. 如何解决phpcms后台验证码不显示的问题
  10. 遗传算法(GA)分析总结(Matlab+C#模拟解决TSP旅行商问题)