mariadb主从复制(主库已有数据)

    技术2022-07-11  146

    公司生产环境某个数据库要在主库已有数据的基础上进行主从复制,涉及生产环境,要慎重,于是先在测试环境测试一下,顺便记录一下操作过程。

    1、安装slave数据库

    主库已存在,内网IP为10.200.9.183,从库准备搭建在10.200.9.188上。

    (1) 下载数据库压缩包并解压

    使用的数据库版本为mariadb-10.0.33,下载方式:

    wget https://downloads.mariadb.com/MariaDB/mariadb-10.0.33/bintar-linux-x86_64/mariadb-10.0.33-linux-x86_64.tar.gz

    解压数据库压缩包:

    tar -xzvf mariadb-10.0.33-linux-x86_64.tar.gz

    移动到指定位置:

    mv mariadb-10.0.33-linux-x86_64 /data/mariadb-10.0.33

    (2)更改配置

    备份/etc下默认数据库配置文件:

    mv /etc/my.cnf /etc/my.cnf.bak

    将数据库中的配置文件模板复制到/etc/下

    cp support-files/my-innodb-heavy-4G.cnf /etc/my.cnf

    编辑配置文件

    vim /etc/my.cnf

    更改以下内容

    basedir=/data/mariadb-10.0.33 datadir=/data/mariadb-10.0.33/data

    (3)创建mysql用户并更改权限

    创建mysql用户:

    useradd -s /sbin/nologin -M mysql

    将mysql所有文件的所属用户和组改为mysql

    chown -R mysql:mysql /data/mariadb-10.0.33

    指定用户、文件路径初始化mysql

    ./scripts/mysql_install_db --basedir=/data/mariadb-10.0.33 --datadir=/data/mariadb-10.0.33/data/ --user=mysql

    (4)设置启动脚本启动mysql

    mariadb有提供启动脚本,在安装目录中的support-files目录里,文件名为mysql.server,将其复制到/etc/init.d下

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

    启动mysql

    /etc/init.d/mysqld start

    或者

    service mysqld start

    mysql开机自启设置:

    chkconfig --add mysqld chkconfig mysqld on

    查看mysql是否添加进开机自启列表:

    chkconfig --list

    如下所示,添加成功

    (5)mysql的root用户授权:

    登录mysql

    /data/mariadb-10.0.33/bin/mysql -u root

    授权:

    grant all privileges on *.* to 'root'@'%' identified by '123456'; grant all privileges on *.* to 'root'@'localhost' identified by '123456'; grant all privileges on *.* to 'root'@'127.0.0.1' identified by '123456';

    刷新权限:

    flush privileges;

    (6)将mysql的命令添加进环境变量

    编辑/etc/profile文件:

    vim /etc/profile

    将以下内容添加进最后一行

    export PATH=$PATH:/data/mariadb-10.0.33/bin

    刷新环境变量

    source /etc/profile

    2、主库设置

    (1)编辑主库配置文件:

    vim /etc/my.cnf

    配置binlog文件名:

    log-bin = mysql-bin

    设置server-id(server-id 必须唯一,不可以和从库重复):

    server-id = 1

    设置主从同步只同步某一个数据库

    binlog-do-db = newenergy

    设置binlog过期时间:

    expire_logs_days = 2

    设置日志格式

    binlog_format = mixed statement 保存SQL语句row 保存影响记录数据mixed 前面两种的结合 建议设置为mxed模式

    (2)创建有复制权限的账号

    IP为从库IP

    GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.* TO 'repluser'@' 10.200.9.188' IDENTIFIED BY 'replpass';

    刷新权限

    FLUSH PRIVILEGES;

    重启数据库

    service mysqld restart

    4、从库设置

    (1)编辑从库配置文件

    vim /etc/my.cnf

    设置中继日志relay-log

    relay-log = relay-bin

    设置server-id(server-id必须唯一,不可与主库和其他从库冲突):

    server-id = 2

    (2)重启数据库 service mysqld restart

    5、从库数据同步主库

    (1)在主库上加锁,使其只有只读权限。

    flush table with read lock;

    (2)查看master状态,记住备份点

    红框中内容需要保留并记录,是从这个地方开始备份的。

    (3)备份主数据库

    因为只同步一个数据库,所以备份这一个数据库即可。

    mysqldump -uroot -p123456 newenergy > newenergy.sql

    (4)解锁表

    unlock tables;

    (5)从库导入备份

    mysql -uroot -p123456 source newenergy.sql

    (6) 从库连接主库

    建议使用SQL语句“CHANGE MASTER TO ”来修改相关配置,主要修改的内容有:

    master_host:master主机IPmaster_port:master数据库的端口master_user:slave连接master用来认证的用户名master_password:slave连接master用来认证的密码master_log_file:master二进制日志的名字master_log_pos:slave开始复制的二进制日志的起始位置

    后面两个参数master_log_file和master_log_pos的设置内容就是之前在show master status时要求保留的File和Position的内容。 登录slave数据库

    mysql -u root -p123456

    连接主库

    CHANGE MASTER TO MASTER_HOST='10.200.9.183',MASTER_USER='repluser',MASTER_PASSWORD='replpass',MASTER_LOG_FILE='mysql-bin.000002',master_port=3307,MASTER_LOG_POS=154;

    (7)启动slave

    start slave;

    (8) 查看slave状态

    show slava status\G;

    如下所示,Slave_SQL_Running和Slave_IO_Running都显示Yes则证明slave成功连接上master。

    (9)排错

    如果Slave_IO_Running没有显示yes, Last_IO_Error会显示错误原因,如图: 此处表名主从数据库的server-id重复,需要修改其中一个server-id并重启。 这里表示无法连接到主数据库,可能是主库端口没开通,或者IP不可达等原因。检查是否能在从库连接到主库即可。

    6、检查是否同步成功

    在主库的newenergy数据库中创建表或者添加字段,在从库能看到即表明同步成功。还可以通过查看Seconds_Behind_Master的值来看同步的延时。

    Processed: 0.019, SQL: 9