首頁  >  文章  >  資料庫  >  mysql主从复制全面解析及应用演练

mysql主从复制全面解析及应用演练

WBOY
WBOY原創
2016-06-07 17:39:13873瀏覽

Mysql复制Mysql内建的复制功能是构建大型、高性能应用程序的基


主服务器:

[root@node1~]# ssh-keygen -t rsa -P '' [root@node1~]##ssh-copy-id -i .ssh/id_rsa.pub root@172.16.18.9

从服务器:

[root@node2~]# ssh-keygen -t rsa -P '' [root@node2~]##ssh-copy-id -i .ssh/id_rsa.pub root@172.16.18.7

2、编辑主从服务器的hosts文件:

[root@node1~]# vim /etc/hosts #####添加如下两项:############### 172.16.18.7node1.magedu.com node1 172.16.18.9node2.magedu.com node2 #####保存并复制至node2上:######## [root@node1~]# scp /etc/hosts 172.16.18.9:/etc

这里不在详细介绍了,请参考

(1)、创建用户 #groupadd -g 306 mysql #useradd -g mysql -u 306 -r mysql (2)、创建数据目录: #mkdir/mydata/data –pv (3)、更改数据目录权限: #chown -R mysql.mysql /mydata/data (4)、解压Mysql创建链接 #tar xfmysql-5.5.33-linux2.6-x86_64.tar.gz -C /usr/local #ln -svmysql-5.5.33-linux2.6-x86_64 mysql (5)、更改属主属组 #cd mysql #chown -R root:mysql./* (6)、初始化mysql #scripts/mysql_install_db--user=mysql --datadir=/mydata/data (7)、创建启动脚本并赋予权限 #cpsupport-files/mysql.server /etc/rc.d/init.d/mysqld #chmod +x/etc/rc.d/init.d/mysqld (8)、创建并修改配置文件 # cp support-files/my-large.cnf /etc/my.cnf # vim /etc/my.cnf 添加如下行指定mysql数据文件的存放位置: datadir = /mydata/data (9)、更改环境变量 #vim/etc/profile.d/mysql.sh 添加: exportPATH=/usr/local/mysql/bin:$PATH #./etc/profile.d/mysql.sh (10)、添加到服务列表中并启动mysql # chkconfig --addmysqld # service mysql start

5、配置主服务器:

(1)编辑配置文件:

[root@node1 ~]# vim /etc/my.cnf server-id = 1 #60行标识自己的ID号 log-bin=mysql-bin #52行二进制日志,默认是启动的 binlog_format=mixed #55行使用混合模式

(2)建立复制账号权限:

[root@node1 ~]# mysql mysql>GRANT REPLICATIONCLIENT,REPLICATION SLAVE ON *.* TO rpuser@'172.16.%.%' IDENTIFIED BY 'rpuser'; mysql> FLUSHPRIVILEGES; #刷新权限

6、配置从服务器:

(1)编辑配置文件:

[root@node2 ~]# vim /etc/my.cnf server-id = 20 #60行标识自己的ID号,和主服务器决不能相同 #log-bin=mysql-bin #52行关闭二进制日志 #binlog_format=mixed #55行关闭使用混合模式 #####设置从服务器为只读模式###### read-only=1 #注意从服务器不可有写模式 #####添加中继日志################ relay-log=/mydata/data/relay-mysql #中继日志 relay-log-index=relay-mysql.index #中继日志索引文件

【relay-log日志记录的是在复制过程中,从服务器I/O线程将主服务器的二进制日志读取过来记录到从服务器本地文件,然后SQL线程会读取relay-log日志的内容并应用到从服务器。】

(2)、登录mysql查看线程:

查看启动线程

mysql> SHOWPROCESSLIST; +----+------+-----------+------+---------+------+-------+------------------+ | Id | User |Host | db | Command | Time | State | Info | +----+------+-----------+------+---------+------+-------+------------------+ | 1 | root | localhost | NULL | Query | 0| NULL | SHOW PROCESSLIST | +----+------+-----------+------+---------+------+-------+------------------+

根据结果显示:此时还未启动任何线程。

(3)、配置连接服务器:

命令参数解析:

mysql>helpCHANGE MASTER TO MASTER_BIND = 'interface_name' #将控制绑定在那个接口上 | MASTER_HOST = 'host_name' #主服务器地址 | MASTER_USER = 'user_name' #主服务器用户(刚才创建的) | MASTER_PASSWORD = 'password' #主服务器密码 | MASTER_PORT = port_num #工作端口 | MASTER_CONNECT_RETRY = interval #重试时间 | MASTER_HEARTBEAT_PERIOD = interval #每隔多长时间探测一下是否落后主服务器,主服务器是否在线 | MASTER_LOG_FILE = 'master_log_name' #指定从哪一个二进制文件复制 | MASTER_LOG_POS = master_log_pos #指定哪一个二进制文件的事件位置 | RELAY_LOG_FILE = 'relay_log_name' #中继日志 | RELAY_LOG_POS = relay_log_pos | MASTER_SSL = {0|1} #是否使用SSL功能 | MASTER_SSL_CA = 'ca_file_name' | MASTER_SSL_CAPATH = 'ca_directory_name' | MASTER_SSL_CERT = 'cert_file_name' | MASTER_SSL_KEY = 'key_file_name' | MASTER_SSL_CIPHER = 'cipher_list' | MASTER_SSL_VERIFY_SERVER_CERT = {0|1} | IGNORE_SERVER_IDS = (server_id_list) #将某些ID号忽略掉

配置从服务器连接主服务器:

mysql> CHANGEMASTER TO MASTER_HOST='172.16.18.7', -> MASTER_USER='rpuser', -> MASTER_PASSWORD='rpuser';

(4)启动从服务器线程:

mysql> START SLAVE;

(5)查看从服务器工作状态

mysql> SHOWSLAVE STATUS\G ***************************1. row *************************** Slave_IO_State: Waiting formaster to send event #I/O状态;接受主服务器发送状态 Master_Host: 172.16.18.7 #主服务器用户账号 Master_User: rpuser #用户 Master_Port: 3306 #默认监听端口 Connect_Retry: 60 #重试时间间隔 Master_Log_File: mysql-bin.000002 #读取的二进制日志文件 Read_Master_Log_Pos: 107 #事件位置 Relay_Log_File:relay-mysql.000003 #当前读取的中继日志文件 Relay_Log_Pos: 253 Relay_Master_Log_File: mysql-bin.000002 Slave_IO_Running: Yes #I/O线程已启动 Slave_SQL_Running: Yes #SQL线程已启动 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: 107 Relay_Log_Space: 966 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: 1

7、测试

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn