在centos上创建MariaDB/Mysql主从(Master/Slave)

Posted 石头那家伙

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在centos上创建MariaDB/Mysql主从(Master/Slave)相关的知识,希望对你有一定的参考价值。

MariaDB/mysql内建的复制功能是构建大型,高性能应用程序的基础。将MySQL的数据分布到多个系统上去,这种分布的机制,是通过将MySQL的某一台主机的数据复制到其它主机(slaves)上,并重新执行一遍来实现的。复制过程中一个服务器充当主服务器,而一个或多个其它服务器充当从服务器。主服务器将更新写入二进制日志文件,并维护文件的一个索引以跟踪日志循环。这些日志可以记录发送到从服务器的更新。当一个从服务器连接主服务器时,它通知主服务器从服务器在日志中读取的最后一次成功更新的位置。从服务器接收从那时起发生的任何更新,然后封锁并等待主服务器通知新的更新。

今天介绍下,如何在centos上搭建一套测试环境。


0.    环境准备:

vm1:10.211.55.46,做master

vm2:10.211.55.47,做slave

其上分别安装了centos7.

  1. 安装MariaDB/Mysql

    sudo yum install mariadb-server mariadb

    sudo systemctl enable mariadb

    sudo systemctl start mariadb

  2. 为数据库用户创建密码

    MariaDB [(none)]> SET PASSWORD = PASSWORD('admin');

    此时,root的密码为admin

  3. 在vm1(master)上做配置

    a. 修改配置文件,命令:vim /etc/my.cnf,输入下列码:

    innodb_file_per_table=NO

    log-bin=/var/lib/mysql/master-bin 

    binlog_format=mixed

    server-id=46  #即IP的后两位

    b. 重启服务

    sudo systemctl restart mariadb.service

    c. 登录mariaDB并赋予复制的权限

    [will@CentOS7-1 ~]$ mysql -u root -p

    Enter password: 

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 52

    Server version: 5.5.56-MariaDB MariaDB Server

    Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]> GRANT REPLICATION SLAVE ON *.* TO 'root'@'10.211.55.%' IDENTIFIED BY 'admin';

    d. 记录主库log文件及其当前位置,记住File和Position的部分,从服务器会用到

        MariaDB [(none)]> show master status;

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

        | File              | Position | Binlog_Do_DB | Binlog_Ignore_DB |

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

        | master-bin.000001 |     2012 |              |                  |

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

        1 row in set (0.00 sec)

  4. 在vm1(master)上创建一个database、table等。

    MariaDB [(none)]> create database testdb;

    MariaDB [(none)]> use testdb;

    MariaDB [(none)]> create table MyClass(id int(4) not null primary key auto_increment,name char(20) not null,sex int(4) not null default '0',degree double(16,2));

    MariaDB [testdb]> insert into MyClass(id) values('1');

    MariaDB [testdb]> insert into MyClass(id) values('2');

    MariaDB [testdb]> insert into MyClass(id) values('3');

    MariaDB [testdb]> insert into MyClass(id) values('4');


    MariaDB [testdb]> select * from MyClass;

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

    | id | name | sex | degree |

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

    |  1 |      |   0 |   NULL |

    |  2 |      |   0 |   NULL |

    |  3 |      |   0 |   NULL |

    |  4 |      |   0 |   NULL |

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

    4 rows in set (0.00 sec)

  5. 在vm2(slave)上做配置

    a. 修改配置文件,命令:vim /etc/my.cnf,输入下列码:

    innodb_file_per_table=NO

    server-id=47 #即IP的后两位

    relay-log=/var/lib/mysql/relay-bin

        b. 重启服务

        sudo systemctl restart mariadb.service

        c. 登录mariaDB并赋予复制的权限

      [will@CentOS7-2 ~]$ mysql -u root -p

    Enter password: 

    Welcome to the MariaDB monitor.  Commands end with ; or \g.

    Your MariaDB connection id is 52

    Server version: 5.5.56-MariaDB MariaDB Server

    Copyright (c) 2000, 2017, Oracle, MariaDB Corporation Ab and others.

    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    MariaDB [(none)]>CHANGE MASTER TO MASTER_HOST='10.211.55.46',MASTER_USER='root', MASTER_PASSWORD='admin', MASTER_LOG_FILE='master-bin.000001', MASTER_LOG_POS=2012;

    这个命令完成以下几个任务:

    设置当前服务器为主服务器(10.211.55.46)的从库

    提供当前数据库(从库)从主库复制数据时所需的用户名和密码,即上面的GRANT REPLICATION SLAVE ON *.* TO 'root'@'10.211.55.%' IDENTIFIED BY 'admin';

    指定从库开始复制主库时需要使用的日志文件和文件位置,即上面主库执行SHOW MASTER STATUS;显示结果中的File和Position


        d. 开启主从复制,并查看slave的状态

MariaDB [(none)]> slave start;

MariaDB [(none)]> show slave status\G;

*************************** 1. row ***************************

               Slave_IO_State: Waiting for master to send event

                  Master_Host: 10.211.55.46

                  Master_User: root

                  Master_Port: 3306

                Connect_Retry: 60

              Master_Log_File: master-bin.000001

          Read_Master_Log_Pos: 2209

               Relay_Log_File: relay-bin.000002

                Relay_Log_Pos: 924

        Relay_Master_Log_File: master-bin.000001

             Slave_IO_Running: Yes

            Slave_SQL_Running: Yes

              Replicate_Do_DB: 

          Replicate_Ignore_DB: 

           Replicate_Do_Table: 

       Replicate_Ignore_Table: 

      Replicate_Wild_Do_Table: 

  Replicate_Wild_Ignore_Table: 

                   Last_Errno: 0

                   Last_Error: 

                 Skip_Counter: 0

          Exec_Master_Log_Pos: 2209

              Relay_Log_Space: 1212

              Until_Condition: None

               Until_Log_File: 

                Until_Log_Pos: 0

           Master_SSL_Allowed: No

           Master_SSL_CA_File: 

           Master_SSL_CA_Path: 

              Master_SSL_Cert: 

            Master_SSL_Cipher: 

               Master_SSL_Key: 

        Seconds_Behind_Master: 0

Master_SSL_Verify_Server_Cert: No

                Last_IO_Errno: 0

                Last_IO_Error: 

               Last_SQL_Errno: 0

               Last_SQL_Error: 

  Replicate_Ignore_Server_Ids: 

             Master_Server_Id: 46

1 row in set (0.00 sec)


注意:结果中Slave_IO_Running和Slave_SQL_Running必须为Yes,如果不是,需要根据提示的错误修改。


最后,就可以做一些简单的测试,比如说在master使用第4步创建的datatable,然后加入一条信息,查看信息是否复制到了slave上。


以上是关于在centos上创建MariaDB/Mysql主从(Master/Slave)的主要内容,如果未能解决你的问题,请参考以下文章

Linux mariadb(Mysql)的主从复制架构

centos通过yum安装mariadb(mysql)无法启动服务或者找不到mysql.sock

Mysql主从复制

CentOS通过yum安装MariaDB(MySQL)无法启动服务或者找不到mysql.sock

Centos7+Mariadb+Keepalived实现Mariadb(MYSQL)的高可用(HA)

Centos7 之 MariaDB(Mysql) root密码忘记的解决办法