zoukankan      html  css  js  c++  java
  • mysql主从库配置ps:mysql5.6

    1 Mysql cluster版本主从服务器搭建实践

     

    主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表。

    同步原理:主从数据库同步主要是通过二进制日志来实现同步的。

    mysql官网下载最新版本:dev.mysql.com

    本文环境:

    mysql服务器:10.1.68.110

    安装版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz

    mysql服务器:10.1.68.102

    安装版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz

    注意:最好是主从服务器采用相同版本,若不行,建议从服务器版本高于主服务器版本。

    另外mysql-5.6.10版本的主从配置与mysql-cluster版本不同,主要是my.cnf配置文件不同,start slave命令也不同,要注意。

    本文章两种版本的配置都有记录。

    1.1 配置主mysql服务器

     

    1.       安装主mysql步骤(参考tar包中的INSTALL-BINARY文件即可,很简单)

    shell> groupadd mysql

    shell> useradd -r -g mysql mysql

    shell> tar zxf  mysql-cluster-gpl-7.2.9-linux2.6-x86_64.tar.gz

    shell> mv mysql-cluster-gpl-7.2.9-linux2.6-x86_64 /opt/mysql-master

    shell> cd /opt/mysql-master

    shell> chown -R mysql.mysql *

    shell> scripts/mysql_install_db --user=mysql

    shell> chown -R root .

    shell> chown -R mysql data

    # Next command is optional

    shell> cp support-files/my-medium.cnf /etc/my.cnf

    shell> bin/mysqld_safe &

    若启动失败,再次尝试一下执行scripts/mysql_install_db --user=mysql命令后在启动。

    # Next command is optional,成功启动了mysqld之后才会生成下面的脚本文件

    shell> cp support-files/mysql.server /etc/init.d/mysql.server

    2.       配置主的my.cnf文件(基本上不需要任何配置,默认都有了)

    # vi /etc/my.cnf

    关键性的配置

    log-bin=mysql-bin

    server-id   = 1

    binlog-do-db=icinga

    binlog-do-db=DB2     如果备份多个数据库,重复设置这个选项即可

    binlog-do-db=DB3  //需要同步的数据库,如果没有本行,即表示同步所有的数据库

    binlog-ignore-db=mysql  //被忽略的数据库

    保存退出

    3.       唯一要做的就是创建允许从服务器访问的帐号backup

    mysql> grant replication slave on *.* to 'backup'@'10.1.68.102' identified by'1234qwer';

    Query OK, 0 rows affected (0.00 sec)

    若有多台从服务器,就将ip修改一下执行多次就可以了。

    4.       重启主机的mysql服务。

    1.2 配置从mysql服务器

     

    1.         安装主mysql步骤(参考tar包中的INSTALL-BINARY文件即可,很简单)

    2.         配置从机的/etc/my.cnf文件

    关键性的配置

    log-bin=mysql-bin

    server-id       = 2

    master-host     =   10.1.68.110

    master-user     =   backup

    master-password =   1234qwer

    master-port     =  3306

    replicate-do-db=icinga

    replicate-do-db=DB2

    binlog-do-db=DB3  //需要同步的数据库,如果没有本行,即表示同步所有的数据库

    binlog-ignore-db=mysql  //被忽略的数据库

    保存退出

    3.         重启从机的mysql服务,基本的从机配置完成。

    4.         若从服务器的偏移量与主机不同,手动修改偏移量

    1)先查看主机的状态信息

    mysql> show master status;

     

    2)登录从机按照主的Position修改从机的Position

    mysql> slave stop;

    mysql> change master to master_host='10.1.68.110',master_user='backup',master_password='1234qwer',master_log_file='mysql-bin.000011',master_log_pos=62291;

    mysql> slave start;

     

    1.3  验证同步

     

    1.         icinga数据库中创建一个表并插入数据

    mysql> create table abc(id int,name char(10));

    Query OK, 0 rows affected (0.40 sec)

    mysql> insert into abc values(1,'shenxiaoran');

    Query OK, 1 row affected, 1 warning (0.01 sec)

    mysql> select * from abc;

     

     

    2.         查看从mysql服务器,表及内容是否都同步过来

    mysql> show tables;

     

    再查看表内容,数据也都同步了,如下图

     

    至此,mysql数据库主从同步完成。

     

    1.4 常用主从同步的命令

     

    1.4.1 主服务器常用命令

    1.       查看主机状态和Position信息,用来让slave机与master保持一致。

    mysql> show master status;

    1.4.2 从服务器常用命令

    mysql> show slave status;

    mysql> slave stop;

    mysql> slave start;

    mysql> show processlist;

    2 Mysql-5.6.10版本主从数据库的搭建

     

    部署环境:

    OS: CentOS release 6.3 (Final)

    mysql-master服务器:192.168.123.75

    安装版本:mysql-5.6.10.tar.gz 源码包

    mysql-slave服务器:192.168.123.105

    安装版本:mysql-5.6.10.tar.gz 源码包

    2.1 分别安装主从mysql-mastermysql-slave服务器

     

    mysql5.6.10.tar.gz是截至2013410mysql官网的最新的源码包版本,该版本的安装方法与传统的mysql安装方法不同,安装前必须手动安装cmake

    cmake官网下载:http://cmake.org/cmake/resources/software.html

    ./bootstrap

    make

    make install

    接下来,安装mysql,我这里写了一个自动安装的shell脚本

     

    2.2 配置主mysql-master服务器

     

    Mysql-5.6.10版本的my.cnf文件默认什么参数都没有,需要自己配

    # vi /etc/my.cnf

    关键性的配置

    log-bin = mysql-bin

    # These are commonly set, remove the # and set as required.

    basedir = /usr/local/mysql

    datadir = /usr/local/mysql/data

    port = 3306

    server_id = 106 // 注意新版本用的是下划线

    socket = /tmp/mysql.sock

    bind-address = 0.0.0.0 //这里绑定监听0.0.0.0:3306,默认是:::3306

    binlog-do-db = cacti  //如果备份多个数据库,重复添加即可,若没有表示备份所有数据库

    binlog-do-db = db2

    binlog-ignore-db = mysql  //被忽略的数据库,不做复制

    保存退出

    5.       唯一要做的就是创建允许从服务器访问的帐号mysync

    mysql> grant replication slave on *.* to 'mysync'@'192.168.123.105' identified by '123456';

    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

    若有多台从服务器,就将ip修改一下执行多次就可以了。

    6.       重启主机的mysql服务。

    从机测试连接到主mysql

    # bin/mysql -h 192.168.123.75 -u mysync -p123456

    mysql>

    测试成功连接。

    2.3 配置从mysql-slave服务器

     

    # vi /etc/my.cnf

    log_bin = mysql-bin

    server_id = 107

    注意,下面的参数不能再使用了,否则导致mysql无法启动

    master-host = 10.1.68.110

    master-user = backup

    master-password = 1234qwer

    master-port = 3306

    1.       登录主服务器的mysql,查询master的状态

    mysql> show master status;

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

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

    | mysql-bin.000002 |      120 | cacti        | mysql            |                   |

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

    1 row in set (0.00 sec)

    注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    2.       登录从mysql服务器,配置binary log文件和Position(其实就是主的binary log文件的大小)与主一致。

    mysql> change master to master_host='192.168.123.75',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;

    Query OK, 0 rows affected, 2 warnings (0.02 sec)

    mysql> start slave;

    Query OK, 0 rows affected (0.01 sec)

    3.       查看从mysql服务器的状态

    mysql> show slave status;

    重点是查看 Slave_IO_Running | Slave_SQL_Running

    如果出现的结果是Yes              | Yes

    说明mysql主从配置成功完成了。

     

    2.4 测试主从服务器同步

     

    1.  将备份后的数据库导入到主mysql服务器中,查看从mysql服务器是否会同步。

    # bin/mysql < /root/cacti_sql_bak

    2.  查看从mysql服务器的数据库是否有更新

    mysql> show databases;

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

    | Database           |

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

    | information_schema |

    | cacti              |

    | mysql              |

    | performance_schema |

    | test               |

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

    5 rows in set (0.01 sec)

    从上面看到主mysql服务器的数据库还未全部导入完成,从mysql服务器已经开始同步了。

     

    3  FAQ

     

    3.1 show slave status命令的结果查看正常,却依然无法看到同步的数据库,原因在哪?

     

    mysql> show slave status; 执行后部分结果如下

    Slave_IO_StateWaiting for master to send event

    Slave_IO_RunningYes

    Slave_SQL_RunningYes

    查看数据库却依然无法同步,原因在哪里?

    解决办法:

    1) 尝试重启master数据库;

    2) 在重启slave数据库之前,必须先删除data目录下的master.info文件,因为master.info记录了上次要连接主库的信息,如果不删除,即使my.cnf里进行了修改,手动修改Position(偏移量)也还是同步不了,因为读取的还是偏移量出错时的master.info文件信息。

    # rm -f data/master.info

    # support-files/mysql.server start

    Starting MySQL.           [  OK  ]

    再次查看slave,同步终于成功了。

    mysql> show processlist;

    id|User          |Host|db      |Command  |Time      |state

    1| system user |       | NULL   | Connect |1196 | Waiting for master to send event

    2 | system user |    | NULL   | Connect |-55692 | Slave has read all relay log; waiting for the slave I/O thread to

    3 | root   |localhost|icinga| Query|  0 |NULL | show processlist

    3.2 show slave status命令的结果出现下面的异常情况,如何解决?

     

    执行mysql> show slave status;命令,看到下面的显示结果

    Slave_IO_Running:Connecting

    Slave_SQL_Running:Yes 

    看到上面的问题,说明是从服务器无法正常连接到主服务器导致。原因一般和下面几种情况有关:

    l  Iptables防护墙阻止了3306端口

    l  mysql服务器的grant授权命令有误

    l  mysql服务器的监听端口不是0.0.0.0:3306,导致别的服务器无法连接到主mysql

    解决办法:

    首先,关闭了iptables

    然后,检查主mysql服务器的grant授权命令,正确无误,这一点排除。

    其次,查看主mysql的监听端口,默认是:::3306,不知道是否因为这个问题导致

    修改主服务器的my.cnf文件,添加下面语句

    bind-address = 0.0.0.0

    重启mysq.server服务

    再次netstat –an|more 查看3306端口,出现了0.0.0.0:3306,说明修改成功。

    登录到从mysql服务器上,远程连接

    # bin/mysql -h 192.168.123.75 -umysync -p123456

    Your MySQL connection id is 8

    Server version: 5.6.10-log Source distribution

    mysql>

    连接成功。

    最后重新执行主从操作:

    mysql服务器:mysql> show master status;

    mysql服务器:mysql> stop slave;

    mysql服务器:mysql> change master to……;

    mysql服务器:mysql> start slave;

    mysql服务器:mysql> show slave status;

    Slave_IO_Running:Yes

    Slave_SQL_Running:Yes 

    再次测试主从同步,成功。

    1 Mysql cluster版本主从服务器搭建实践

     

    主从的作用:MySQL的主从服务器可以满足同步数据库,同步表,同步表内容,也可以指定仅同步某个数据库或某个表,还可以排除不同步某个数据库某个表。

    同步原理:主从数据库同步主要是通过二进制日志来实现同步的。

    mysql官网下载最新版本:dev.mysql.com

    本文环境:

    mysql服务器:10.1.68.110

    安装版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz

    mysql服务器:10.1.68.102

    安装版本:mysql-cluster-gpl-7.0.35-linux-x86_64-glibc23.tar.gz

    注意:最好是主从服务器采用相同版本,若不行,建议从服务器版本高于主服务器版本。

    另外mysql-5.6.10版本的主从配置与mysql-cluster版本不同,主要是my.cnf配置文件不同,start slave命令也不同,要注意。

    本文章两种版本的配置都有记录。

    1.1 配置主mysql服务器

     

    1.       安装主mysql步骤(参考tar包中的INSTALL-BINARY文件即可,很简单)

    shell> groupadd mysql

    shell> useradd -r -g mysql mysql

    shell> tar zxf  mysql-cluster-gpl-7.2.9-linux2.6-x86_64.tar.gz

    shell> mv mysql-cluster-gpl-7.2.9-linux2.6-x86_64 /opt/mysql-master

    shell> cd /opt/mysql-master

    shell> chown -R mysql.mysql *

    shell> scripts/mysql_install_db --user=mysql

    shell> chown -R root .

    shell> chown -R mysql data

    # Next command is optional

    shell> cp support-files/my-medium.cnf /etc/my.cnf

    shell> bin/mysqld_safe &

    若启动失败,再次尝试一下执行scripts/mysql_install_db --user=mysql命令后在启动。

    # Next command is optional,成功启动了mysqld之后才会生成下面的脚本文件

    shell> cp support-files/mysql.server /etc/init.d/mysql.server

    2.       配置主的my.cnf文件(基本上不需要任何配置,默认都有了)

    # vi /etc/my.cnf

    关键性的配置

    log-bin=mysql-bin

    server-id   = 1

    binlog-do-db=icinga

    binlog-do-db=DB2     如果备份多个数据库,重复设置这个选项即可

    binlog-do-db=DB3  //需要同步的数据库,如果没有本行,即表示同步所有的数据库

    binlog-ignore-db=mysql  //被忽略的数据库

    保存退出

    3.       唯一要做的就是创建允许从服务器访问的帐号backup

    mysql> grant replication slave on *.* to 'backup'@'10.1.68.102' identified by'1234qwer';

    Query OK, 0 rows affected (0.00 sec)

    若有多台从服务器,就将ip修改一下执行多次就可以了。

    4.       重启主机的mysql服务。

    1.2 配置从mysql服务器

     

    1.         安装主mysql步骤(参考tar包中的INSTALL-BINARY文件即可,很简单)

    2.         配置从机的/etc/my.cnf文件

    关键性的配置

    log-bin=mysql-bin

    server-id       = 2

    master-host     =   10.1.68.110

    master-user     =   backup

    master-password =   1234qwer

    master-port     =  3306

    replicate-do-db=icinga

    replicate-do-db=DB2

    binlog-do-db=DB3  //需要同步的数据库,如果没有本行,即表示同步所有的数据库

    binlog-ignore-db=mysql  //被忽略的数据库

    保存退出

    3.         重启从机的mysql服务,基本的从机配置完成。

    4.         若从服务器的偏移量与主机不同,手动修改偏移量

    1)先查看主机的状态信息

    mysql> show master status;

     

    2)登录从机按照主的Position修改从机的Position

    mysql> slave stop;

    mysql> change master to master_host='10.1.68.110',master_user='backup',master_password='1234qwer',master_log_file='mysql-bin.000011',master_log_pos=62291;

    mysql> slave start;

     

    1.3  验证同步

     

    1.         icinga数据库中创建一个表并插入数据

    mysql> create table abc(id int,name char(10));

    Query OK, 0 rows affected (0.40 sec)

    mysql> insert into abc values(1,'shenxiaoran');

    Query OK, 1 row affected, 1 warning (0.01 sec)

    mysql> select * from abc;

     

     

    2.         查看从mysql服务器,表及内容是否都同步过来

    mysql> show tables;

     

    再查看表内容,数据也都同步了,如下图

     

    至此,mysql数据库主从同步完成。

     

    1.4 常用主从同步的命令

     

    1.4.1 主服务器常用命令

    1.       查看主机状态和Position信息,用来让slave机与master保持一致。

    mysql> show master status;

    1.4.2 从服务器常用命令

    mysql> show slave status;

    mysql> slave stop;

    mysql> slave start;

    mysql> show processlist;

    2 Mysql-5.6.10版本主从数据库的搭建

     

    部署环境:

    OS: CentOS release 6.3 (Final)

    mysql-master服务器:192.168.123.75

    安装版本:mysql-5.6.10.tar.gz 源码包

    mysql-slave服务器:192.168.123.105

    安装版本:mysql-5.6.10.tar.gz 源码包

    2.1 分别安装主从mysql-mastermysql-slave服务器

     

    mysql5.6.10.tar.gz是截至2013410mysql官网的最新的源码包版本,该版本的安装方法与传统的mysql安装方法不同,安装前必须手动安装cmake

    cmake官网下载:http://cmake.org/cmake/resources/software.html

    ./bootstrap

    make

    make install

    接下来,安装mysql,我这里写了一个自动安装的shell脚本

     

    2.2 配置主mysql-master服务器

     

    Mysql-5.6.10版本的my.cnf文件默认什么参数都没有,需要自己配

    # vi /etc/my.cnf

    关键性的配置

    log-bin = mysql-bin

    # These are commonly set, remove the # and set as required.

    basedir = /usr/local/mysql

    datadir = /usr/local/mysql/data

    port = 3306

    server_id = 106 // 注意新版本用的是下划线

    socket = /tmp/mysql.sock

    bind-address = 0.0.0.0 //这里绑定监听0.0.0.0:3306,默认是:::3306

    binlog-do-db = cacti  //如果备份多个数据库,重复添加即可,若没有表示备份所有数据库

    binlog-do-db = db2

    binlog-ignore-db = mysql  //被忽略的数据库,不做复制

    保存退出

    5.       唯一要做的就是创建允许从服务器访问的帐号mysync

    mysql> grant replication slave on *.* to 'mysync'@'192.168.123.105' identified by '123456';

    Query OK, 0 rows affected (0.00 sec)

    mysql> flush privileges;

    Query OK, 0 rows affected (0.00 sec)

    若有多台从服务器,就将ip修改一下执行多次就可以了。

    6.       重启主机的mysql服务。

    从机测试连接到主mysql

    # bin/mysql -h 192.168.123.75 -u mysync -p123456

    mysql>

    测试成功连接。

    2.3 配置从mysql-slave服务器

     

    # vi /etc/my.cnf

    log_bin = mysql-bin

    server_id = 107

    注意,下面的参数不能再使用了,否则导致mysql无法启动

    master-host = 10.1.68.110

    master-user = backup

    master-password = 1234qwer

    master-port = 3306

    1.       登录主服务器的mysql,查询master的状态

    mysql> show master status;

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

    | File             | Position | Binlog_Do_DB | Binlog_Ignore_DB | Executed_Gtid_Set |

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

    | mysql-bin.000002 |      120 | cacti        | mysql            |                   |

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

    1 row in set (0.00 sec)

    注:执行完此步骤后不要再操作主服务器MYSQL,防止主服务器状态值变化

    2.       登录从mysql服务器,配置binary log文件和Position(其实就是主的binary log文件的大小)与主一致。

    mysql> change master to master_host='192.168.123.75',master_user='mysync',master_password='123456',master_log_file='mysql-bin.000002',master_log_pos=120;

    Query OK, 0 rows affected, 2 warnings (0.02 sec)

    mysql> start slave;

    Query OK, 0 rows affected (0.01 sec)

    3.       查看从mysql服务器的状态

    mysql> show slave status;

    重点是查看 Slave_IO_Running | Slave_SQL_Running

    如果出现的结果是Yes              | Yes

    说明mysql主从配置成功完成了。

     

    2.4 测试主从服务器同步

     

    1.  将备份后的数据库导入到主mysql服务器中,查看从mysql服务器是否会同步。

    # bin/mysql < /root/cacti_sql_bak

    2.  查看从mysql服务器的数据库是否有更新

    mysql> show databases;

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

    | Database           |

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

    | information_schema |

    | cacti              |

    | mysql              |

    | performance_schema |

    | test               |

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

    5 rows in set (0.01 sec)

    从上面看到主mysql服务器的数据库还未全部导入完成,从mysql服务器已经开始同步了。

     

    3  FAQ

     

    3.1 show slave status命令的结果查看正常,却依然无法看到同步的数据库,原因在哪?

     

    mysql> show slave status; 执行后部分结果如下

    Slave_IO_StateWaiting for master to send event

    Slave_IO_RunningYes

    Slave_SQL_RunningYes

    查看数据库却依然无法同步,原因在哪里?

    解决办法:

    1) 尝试重启master数据库;

    2) 在重启slave数据库之前,必须先删除data目录下的master.info文件,因为master.info记录了上次要连接主库的信息,如果不删除,即使my.cnf里进行了修改,手动修改Position(偏移量)也还是同步不了,因为读取的还是偏移量出错时的master.info文件信息。

    # rm -f data/master.info

    # support-files/mysql.server start

    Starting MySQL.           [  OK  ]

    再次查看slave,同步终于成功了。

    mysql> show processlist;

    id|User          |Host|db      |Command  |Time      |state

    1| system user |       | NULL   | Connect |1196 | Waiting for master to send event

    2 | system user |    | NULL   | Connect |-55692 | Slave has read all relay log; waiting for the slave I/O thread to

    3 | root   |localhost|icinga| Query|  0 |NULL | show processlist

    3.2 show slave status命令的结果出现下面的异常情况,如何解决?

     

    执行mysql> show slave status;命令,看到下面的显示结果

    Slave_IO_Running:Connecting

    Slave_SQL_Running:Yes 

    看到上面的问题,说明是从服务器无法正常连接到主服务器导致。原因一般和下面几种情况有关:

    l  Iptables防护墙阻止了3306端口

    l  mysql服务器的grant授权命令有误

    l  mysql服务器的监听端口不是0.0.0.0:3306,导致别的服务器无法连接到主mysql

    解决办法:

    首先,关闭了iptables

    然后,检查主mysql服务器的grant授权命令,正确无误,这一点排除。

    其次,查看主mysql的监听端口,默认是:::3306,不知道是否因为这个问题导致

    修改主服务器的my.cnf文件,添加下面语句

    bind-address = 0.0.0.0

    重启mysq.server服务

    再次netstat –an|more 查看3306端口,出现了0.0.0.0:3306,说明修改成功。

    登录到从mysql服务器上,远程连接

    # bin/mysql -h 192.168.123.75 -umysync -p123456

    Your MySQL connection id is 8

    Server version: 5.6.10-log Source distribution

    mysql>

    连接成功。

    最后重新执行主从操作:

    mysql服务器:mysql> show master status;

    mysql服务器:mysql> stop slave;

    mysql服务器:mysql> change master to……;

    mysql服务器:mysql> start slave;

    mysql服务器:mysql> show slave status;

    Slave_IO_Running:Yes

    Slave_SQL_Running:Yes 

    再次测试主从同步,成功。

  • 相关阅读:
    相关系数
    T检验
    Python模块常用的几种安装方式
    DOM与SAX读取XML方式的不同
    Base64编码
    node.js网页爬虫
    Node.js Express 框架
    Node.js Web 模块
    Node.js GET/POST请求
    Node.js 常用工具
  • 原文地址:https://www.cnblogs.com/shininguang/p/5438035.html
Copyright © 2011-2022 走看看