mariadb单机多实例主从复制

准备工作:

停掉数据库服务:

systemctl stop mariadb.service

将主库的数据库文件拷贝一份作为从库数据:

cp -a -r /data/mysql_data/mysql/* /data/mysql_data/mysql2/

拷贝完启动:

 systemctl start mariadb.service

步骤1:配置主库和从库多实例的cnf文件

主库和从库共用一个cnf文件, /etc/my.cnf

[mysqld]

log-bin=mysql-bin-log

server-id=1 

datadir=/data/mysql_data/mysql

socket=/data/mysql_data/mysql/mysql.sock

innodb_flush_log_at_trx_commit=1

sync_binlog=1

pid-file=/run/mariadb/mariadb.pid

注意:为了使用事务的InnoDB在复制中最大的持久性和一致性,你应该指定innodb_flush_log_at_trx_commit=1,sync_binlog=1选项

[mysqld3307]

port=3307(单机多实例必须指定不同于3306的端口)

log-bin=mysql-bin-log

server-id=2  (不同于主库实例的id)

datadir=/data/mysql_data/mysql2

socket=/data/mysql_data/mysql2/mysql3307.sock

pid-file=/run/mariadb/mariadb3307.pid

 

 

 

步骤2:创建一个复制权限的账号:

mysql会赋予一些特殊的权限给复制线程,在备库运行的I/O线程会建立一个到主库的

TCP/IP连接,这意味着必须在主库创建一个用户,并赋予其合适的权限,备库I/O线程以该用户名连接到主库并读取其二进制日志,    

创建用户账号语句:

mysql> CREATE USER repl@127.0.0.1;

mysql> GRANT REPLICATION SLAVE,REPLICATION CLIENT ON *.*

        -> TO repl@'127.0.0.1' INDENTIFIED BY 'repl';

我们再主库和备库都创建该账号,注意我们把这个账户限制在本地网络,因为这是一个特权账号(尽管该账号无法执行select或修改数据,但仍然能从二进制日志中获得一些数据)

 

步骤3:锁定主机,注意二进制日志的位置并备份主机数据库

 

在主机上执行FLUSH TABLES WITH READ LOCK语句来刷新所有的表并阻断写操作:

master> FLUSH TABLES WITH READ LOCK;

当FLUSH TABLES WITH READ LOCK中的读操作锁生效时,用以下命令在主机读取当前的二进制日志名称和偏差的值:

master> SHOW MASTER STATUS;

File:         mysql-bin-log.000001

Positin:   1234

该命令显示列出了当前主库使用的binlog文件名File,和日志在文件中的偏差量Position,这两个参数在后面设置从库的时候会用到。它们代表了从库什么时候开始处理新的更新的坐标。

注意:如果之前主机没有开启bin-log功能,用SHOW MASTER STATUS命令显示的日志文件和position值为空,如果是这种情况,那么你后面要在从机日志里面指定的名称和positon值应该是空字符串('')和4.

 

接下来,继续在主库客户端窗口执行 FLUSH TABLES WITH READ LOCK;

 

注意:你可以使用以下命令在主机上重新打开写操作功能:

master> UNLOCK TABLES;

 

步骤4:初始化复制

连接从库:mysql -S /data/mysql_data/mysql2/mysql3307.sock

现在我们准备好在从库实例上初始化复制了。在从库实例上执行以下命令:

slave> SLAVE STOP;

接着,你要输入一条CHANGE MASTER 命令:

slave> CHANGE MASTER TO MASTER_HOST='127.0.0.1',

       -> MASTER_USER='repl',

       -> MASTER_PASSWORD='repl'

       -> MASTER_LOG_FILE='mysql-bin-log.000001',

       -> MASTER_LOG_POS=1234;

参数含义:

  • MASTER_HOST:主库的ip
  • MASTER_USER:步骤2中授予REPLICATION SLAVE权限的用户
  • MASTER_PASSWORD:repl用户的密码
  • MASTER_LOG_FILE:show master status中的文件名
  • MASTER_LOG_POS: show master status中的position

最后在从库实例上开始复制:

slave> start slave;

 

步骤5:基础检查

进行数据插入来检验是否复制成功

也可以用下面的命令检查状态:

mysql> SHOW SLAVE STATUS\G;

mysql> SHOW PROCESSLIST\G;

 

posted @ 2016-04-18 20:49  rebaomi  阅读(796)  评论(0编辑  收藏  举报