|
CentOS6.4系统MySQL主从复制基本配置教程 rpm -qa |grep mysql
yum install -y mysql-server mysql mysql-deve
/etc/init.d/mysqld start
mysqladmin -u root password 'shiyanjun'
mysql -u root -p 关闭iptables setenforce
主节点配置 首先,考虑到数据库的安全,以及便于管理,我们需要在主节点m1上增加一个专用的复制用户,使得任意想要从主节点进行复制从节点都必须使用这个账号: CREATE USER repli_user; GRANT REPLICATION SLAVE ON *.* TO 'repli_user'@'%' IDENTIFIED BY 'shiyanjun';
这里还进行了操作授权,使用这个换用账号来执行集群复制。如果想要限制IP端段,也可以在这里进行配置授权。
然后,在主节点192.168.6.17上,修改MySQL配置文件/etc/my.cnf,使其支持Master复制功能,修改后的内容如下所示:
[mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 server-id=1 log-bin=m-bin log-bin-index=m-bin.index
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
server-id指明主节点的身份,从节点通过这个server-id来识别该节点是Master节点(复制架构中的源数据库服务器节点)。
如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器: /etc/init.d/mysqld restart
从节点配置 接着,类似地进行从节点192.168.7.113的配置,同样修改MySQL配置文件/etc/my.cnf,使其支持Slave端复制功能,修改后的内容如下所示: [mysqld] datadir=/var/lib/mysql socket=/var/lib/mysql/mysql.sock user=mysql # Disabling symbolic-links is recommended to prevent assorted security risks symbolic-links=0 server-id=2 relay-log=slave-relay-bin relay-log-index=slave-relay-bin.index
[mysqld_safe] log-error=/var/log/mysqld.log pid-file=/var/run/mysqld/mysqld.pid
同样,如果MySQL当前已经启动,修改完集群复制配置后需要重启服务器: /etc/init.d/mysqld restart
然后,需要使从节点192.168.7.113指向主节点,并启动Slave复制,执行如下命令: CHANGE MASTER TO MASTER_HOST='192.168.6.17', MASTER_PORT=3306, MASTER_USER='repli_user', MASTER_PASSWORD='shiyanjun'; START SLAVE;
验证集群复制 这时,可以在主节点192.168.6.17上执行相关操作,验证从节点nn同步复制了主节点的数据库中的内容变更。
如果此时,我们已经配置好了主从复制,那么对于主节点m1上MysQL数据库的任何变更都会复制到从节点nn上,包括建库建表、插入更新等操作,下面我们从建库开始:
在主节点192.168.6.17上建库建表: CREATE DATABASE workflow; CREATE TABLE `workflow`.`project` ( `id` int(11) NOT NULL AUTO_INCREMENT, `name` varchar(100) NOT NULL, `type` tinyint(4) NOT NULL DEFAULT '0', `description` varchar(500) DEFAULT NULL, `create_at` date DEFAULT NULL, `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, `status` tinyint(4) NOT NULL DEFAULT '0', PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
在192.168.6.17上查看binlog内容,执行命令: SHOW BINLOG EVENTS\G binlog内容内容如下所示: 01 *************************** 1. row *************************** 02 Log_name: m-bin.000001 03 Pos: 4 04 Event_type: Format_desc 05 Server_id: 1 06 End_log_pos: 106 07 Info: Server ver: 5.1.73-log, Binlog ver: 4 08 *************************** 2. row *************************** 09 Log_name: m-bin.000001 10 Pos: 106 11 Event_type: Query 12 Server_id: 1 13 End_log_pos: 197 14 Info: CREATE DATABASE workflow 15 *************************** 3. row *************************** 16 Log_name: m-bin.000001 17 Pos: 197 18 Event_type: Query 19 Server_id: 1 20 End_log_pos: 671 21 Info: CREATE TABLE `workflow`.`project` ( 22 `id` int(11) NOT NULL AUTO_INCREMENT, 23 `name` varchar(100) NOT NULL, 24 `type` tinyint(4) NOT NULL DEFAULT '0', 25 `description` varchar(500) DEFAULT NULL, 26 `create_at` date DEFAULT NULL, 27 `update_at` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP, 28 `status` tinyint(4) NOT NULL DEFAULT '0', 29 PRIMARY KEY (`id`) 30 ) ENGINE=InnoDB DEFAULT CHARSET=utf8 31 3 rows in set (0.00 sec) 通过上述binlog内容,我们大概可以看到MySQL的binlog都记录那些信息,一个事件对应一行记录。这些记录信息的组织结构如下所示:
Log_name:日志名称,指定的记录操作的binlog日志名称,这里是m-bin.000001,与我们前面在/etc/my.cnf中配置的相对应 Pos:记录事件的起始位置 Event_type:事件类型 End_log_pos:记录事件的结束位置 Server_id:服务器标识 Info:事件描述信息 然后,我们可以查看在从节点nn上复制的情况。通过如下命令查看从节点nn上数据库和表的信息:
1 SHOW DATABASES; 2 USE workflow; 3 SHOW TABLES; 4 DESC project; 我们再看一下执行插入语句的情况。在主节点m1上执行如下SQL语句:
1 INSERT INTO `workflow`.`project` VALUES(1, 'Avatar-II', 1, 'Avatar-II project', '2014-02-16','2014-02-16 11:09:54', 0); 可以在从节点上执行查询,看到从节点nn上复制了主节点m1上执行的INSERT语句的记录:
1 SELECT * FROM workflow.project; 验证复制成功。
复制常用命令
下面,我们总结了几个在MySQL主从复制场景中常用到的几个相关命令:
1 STOP MASTER; 终止主节点复制 1 RESET MASTER; 清除主节点复制文件 1 STOP SLAVE; 终止从节点复制 1 RESET SLAVE; 清除从节点复制文件 1 SHOW MASTER STATUS\G; 结果示例:
*************************** 1. row *************************** File: m-bin.000001 Position: 956 Binlog_Do_DB: Binlog_Ignore_DB: 1 row in set (0.00 sec) 查看主节点复制状态 1 SHOW SLAVE STATUS\G; 结果示例:
01 *************************** 1. row *************************** 02 Slave_IO_State: Waiting for master to send event 03 Master_Host: m1 04 Master_User: repli_user 05 Master_Port: 3306 06 Connect_Retry: 60 07 Master_Log_File: m-bin.000001 08 Read_Master_Log_Pos: 956 09 Relay_Log_File: slave-relay-bin.000002 10 Relay_Log_Pos: 1097 11 Relay_Master_Log_File: m-bin.000001 12 Slave_IO_Running: Yes 13 Slave_SQL_Running: Yes 14 Replicate_Do_DB: 15 Replicate_Ignore_DB: 16 Replicate_Do_Table: 17 Replicate_Ignore_Table: 18 Replicate_Wild_Do_Table: 19 Replicate_Wild_Ignore_Table: 20 Last_Errno: 0 21 Last_Error: 22 Skip_Counter: 0 23 Exec_Master_Log_Pos: 956 24 Relay_Log_Space: 1252 25 Until_Condition: None 26 Until_Log_File: 27 Until_Log_Pos: 0 28 Master_SSL_Allowed: No 29 Master_SSL_CA_File: 30 Master_SSL_CA_Path: 31 Master_SSL_Cert: 32 Master_SSL_Cipher: 33 Master_SSL_Key: 34 Seconds_Behind_Master: 0 35 Master_SSL_Verify_Server_Cert: No 36 Last_IO_Errno: 0 37 Last_IO_Error: 38 Last_SQL_Errno: 0 39 Last_SQL_Error: 40 1 row in set (0.00 sec) 查看从节点复制状态 1 SHOW BINARY LOGS\G 查看BINLOG列表
|