mysql远程访问,主从/主主双机备份,以及使用keeplived实现故障自动切换(一)

突然发现CSDN博客对字数有限制,只能将文章切分为两篇。

(一)mysql远程访问,主从/主主双机备份
(二)使用keeplived实现故障自动切换,及参考文章

1. mysql远程访问

  mysql默认不允许远程访问,必须在Server端配置用户权限来实现远程访问。 

mysql> GRANT ALL ON *.* TO user@'%' IDENTIFIED BY 'passwd' WITH GRANT OPTION;
  • ALL表示开放所有权限,也可以用insert,update,delete,create等替换

  • 第一个*表示所有数据库

  • 第二个*表示指定数据库下的所有表

  • %表示所有远程主机都可以访问,可用具体主机ip替换

  • WITH GRANT OPTION表示允许user用户传递权限给第三方

    若user用户不存在,以上命令也相应创建了用户user,密码为passwd.

mysql> flush privileges;

 通过flush privileges使得授权生效。

 需要注意的是,%不包括本地IP,故不能在本机访问。

2. mysql双机备份

  • 主从备份,是指主服务器的mysql数据做的任何改动都会同步到从服务器上

  • 主主备份,顾名思义,即两台是地位平等的主服务器,任一台服务器上mysql数据的改动都会同步到另一台服务器。

    双机备份可通过对mysql自身的配置来实现。

主从备份步骤如下:

(1)在主服务器master上创建有远程访问权限的用户user1
(2)在主服务器master的文件 /etc/my.cnf中,[mysqld]下加入以下片段,以打开binarylog。

log-bin = mysql-bin
binlog_format = mixed
server-id = 1

read-only = 0
#binlog-do-db=
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#auto-increment-increment = 2
#auto-increment-offset = 1
  • binlog-do-db,表示哪些db的改动需要记录到binary日志,以实现备份。
  • binlog-ignore-db,表示哪些db的改动要被忽略。
  • auto-increment-increment和auto-increment-offset,用在主主备份中,以避免不同Server对同一张表写入数据,自增主键产生冲突。

(3)查看主服务器的binary日志位置,

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000003
         Position: 1191
     Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql,information_schema,performance_schema
Executed_Gtid_Set: 
1 row in set (0.07 sec)
  • File,表示当前正在记录的 binarylog文件为mysql-bin.000003
  • Position,表示当前文件的记录偏移量

    配置从服务器时,需要知道这两个值,以便知道从哪读取主服务器的数据。

(4)在从服务器的文件 /etc/my.cnf中,[mysqld]下加入以下片段

log-bin = mysql-bin
binlog_format = mixed
server-id = 2

#replicate-do-db =
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
relay_log = mysqld-relay-bin
log-slave-updates = ON
  • server-id,需要和主服务器设置的不一样
  • replicate-do-db,指定需要复制的数据库
  • replicate-ignore-db,复制时需要排除的数据库
  • relay_log,中继日志,复制线程需要先把远程的变化拷贝到这个日志中, 再执行。
  • log-slave-updates,指中继日志执行后,这些变化是否需要计入自己的binarylog。

(5)在从服务器上,执行以下命令

 mysql> CHANGE MASTER TO 
        MASTER_HOST='172.16.188.129', 
        MASTER_USER='user1', 
        MASTER_PASSWORD='123', 
        MASTER_LOG_FILE='mysql-bin.000003', 
        MASTER_LOG_POS=1191;

其中的MASTER_LOG_FILE, MASTER_LOG_POS即为第三步获取的数据。

(6)主从服务器重启mysql

service mysqld restart

(7)从服务器上,查看slave线程是否开启

show slave status\G

 若Slave_IO_Running, Slave_SQL_Running 均为Yes,则开启。

 以上7步就实现了主从备份。现在向主服务器中添加数据,从服务器中也能添加相应数据。

接下来实现主主备份,方法与之前类似,步骤如下:

(1)在从服务器slave上创建有远程访问权限的用户user2
(2)在从服务器的文件 /etc/my.cnf中,[mysqld]下加入以下片段,以打开binarylog。

read-only = 0
#binlog-do-db=
binlog-ignore-db = mysql
binlog-ignore-db = information_schema
binlog-ignore-db = performance_schema
#auto-increment-increment = 2
#auto-increment-offset = 2

(3)查看从服务器的binary日志位置,

mysql> show master status\G
*************************** 1. row ***************************
             File: mysql-bin.000006
         Position: 120
     Binlog_Do_DB: 
 Binlog_Ignore_DB: mysql,information_schema,performance_schema
Executed_Gtid_Set: 
1 row in set (0.07 sec)

(4)在主服务器的文件 /etc/my.cnf中,[mysqld]下加入以下片段

#replicate-do-db =
replicate-ignore-db = mysql
replicate-ignore-db = information_schema
replicate-ignore-db = performance_schema
relay_log = mysqld-relay-bin
log-slave-updates = ON

(5)在主服务器上,执行以下命令

 mysql> CHANGE MASTER TO 
        MASTER_HOST='172.16.188.130', 
        MASTER_USER='user2', 
        MASTER_PASSWORD='123', 
        MASTER_LOG_FILE='mysql-bin.000006', 
        MASTER_LOG_POS=120;

(6)主从服务器重启mysql

service mysqld restart

(7)主服务器上,查看slave线程是否开启

show slave status\G

以上,即实现了两台服务器之间的相互备份。

需要注意的是,mysql要支持中文,需在/etc/my.cfg中加入如下片段

character-set-server = utf8
init_connect='SET NAMES utf8'

猜你喜欢

转载自blog.csdn.net/lujian1989/article/details/53283378