欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  数据库

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

程序员文章站 2024-02-16 11:20:22
...

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、测试