共计 6280 个字符,预计需要花费 16 分钟才能阅读完成。
这篇文章主要讲解了“MYSQL 主从搭建的方法是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着丸趣 TV 小编的思路慢慢深入,一起来研究和学习“MYSQL 主从搭建的方法是什么”吧!
一、MySQL 主从复制搭建
MySQL 主从复制搭建主要步骤有:安装 mysql 软件、Master 端配置部署、Slave 端配置部署、建立主从同步
1、 安装 MYSQL
a、环境准备及软件安装
应用需求:
双机热备提供备份,冗余功能
安装环境:
NODE1 主机名 master IP 地址 192.168.159.128
NODE2 主机名 slave IP 地址 192.168.159.129
VIA IP(漂移 IP)10.10.10.100
NODE1 为主节点,NODE2 为从节点,同步的数据库名 fire9
在安装之前请确认下面的安装包不存在
rpm -e mysql-devel-4.1.20-1.RHEL4.1
rpm -e mysql-bench-4.1.20-1.RHEL4.1
rpm -e php-mysql-4.3.9-3.15
rpm -e libdbi-dbd-mysql-0.6.5-10.RHEL4.1
rpm -e mod_auth_mysql-2.6.1-2.2
rpm -e mysql-server-4.1.20-1.RHEL4.1
rpm -e MySQL-python-1.0.0-1.RHEL4.1.i386
rpm -e MyODBC-2.50.39-21.RHEL4.1.i386
rpm -e qt-MySQL-3.3.3-9.3.i386
rpm -e mysqlclient10-devel-3.23.58-4.RHEL4.1.i386
rpm -e mysqlclient10-3.23.58-4.RHEL4.1
rpm -e cyrus-sasl-sql-2.1.19-5.EL4.i386
rpm -e perl-DBD-MySQL-2.9004-3.1.i386
rpm -e mysql-4.1.20-1.RHEL4.1
安装准备:我已经把相关的软件和配置文件都放在工具包里面了
redhat as 4 update4 32 位
mysql-5.0.45-linux-i686-icc-glibc23.tar.gz
libnet-1.1.2.1-1.rh.el.um.1.i386.rpm
heartbeat-pils-2.0.4-1.el4.i386.rpm
heartbeat-stonith-2.0.4-1.el4.i386.rpm
heartbeat-2.0.4-1.el4.i386
perl-5.8.8.tar.gz
DBI-1.59.tar.gz
DBD-mysql-4.005.tar.gz
Time-HiRes-01.20.tar.gz
Period-1.20.tar.gz
Convert-BER-1.31.tar.gz
Mon-0.11.tar.gz
mon-0.99.3-47.tar.gz
b、安装 MYSQL 主从都要进行安装
# tar zxvf mysql-5.0.45-linux-i686-icc-glibc23.tar.gz -C /usr/local/
# cd /usr/local/
# mv mysql-5.0.45-linux-i686-icc-glibc23 mysql
# cd mysql
# groupadd mysql
# useradd -g mysql mysql
#passwd mysql
# ./scripts/mysql_install_db –user=mysql
# cp support-files/mysql.server /etc/rc.d/init.d/mysqld
# chmod +x /etc/rc.d/init.d/mysqld
# chkconfig –add mysqld
# /etc/rc.d/init.d/mysqld start
注:主从都使用 yum install 的方式安装系统自带的 mysql 也可以使用,只是版本会比较低
2、 Master 端配置部署
a、 在主服务器上的 my.cnf 配置文件中的 [mysqld] 节点下添加以下配置
黄色部分为新添加
vi /etc/my.cnf
[mysqld]
server-id=101
log-bin=/var/lib/mysql/mysql-bin.log
log-bin-index=/var/lib/mysql/mysql-bin.index
expire_logs_days=30
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
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
说明:
log-bin :给出二进制日志的所有文件基础名
log-bin-index :给出二进制日志文件的文件名,通常以 000001 开始,顺序递增。全名:master-bin.000001
server-id :mysql 服务器唯一 ID,在主从复制的所有服务器中必须唯一。
b、 创建用户,并赋予权限:
create user repl_user;
GRANT REPLICATION SLAVE ON *.* TO repl @ % IDENTIFIED BY PASSWORD ******
设置密码时会遇到报错:
ERROR 1372 (HY000): Password hash should be a 41-digit hexadecimal number
解决办法:用 select password(你想输入的密码 查询出你的密码对应的字符串
select password(123456
查出的是 *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
2、Slave 端配置部署
a、配置参数:[mysqld]
黄色部分为新添加
vi /etc/my.cnf
[mysqld]
server-id=102
log-bin=/var/lib/mysql/mysql-relay-bin.log
log-bin-index=/var/lib/mysql/mysql-relay-bin.index
relay_log_purge=on
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
[mysqld_safe]
log-error=/var/log/mysqld.log
pid-file=/var/run/mysqld/mysqld.pid
3、建立主从同步
(重建备库也是使用该方法)
建立主从同步可以从主库上导出数据,也可以从已有的从库上导出数据,然后再导入到新的从库中,change master to 建立同步。
3.1、导出数据
在主库上导出数据:
mysqldump -u***-p***-S /data/mysql6001/mysql.sock –default-character-set=utf8 –q –single-transaction –master-data-A /tmp/all_database.sql
(或者)在从库上导出数据:
mysqldump -u***-p***-S /data/mysql6001/mysql.sock –default-character-set=utf8 -q –single-transaction –dump-slave-A /tmp/all_database.sql
NOTES:
–master-data 和 –dump-slave 导出的备份中,会包含 master_log_file 和 master_log_pos 信息。
例子:
mysqldump -uroot –events –all-databases /opt/mysql.dump
3.2、从库导入数据
mysql -u*** -p*** –default-character-set=utf8 all_database.sql
例子:
mysql -uroot mysql.dump /mysql.dump
3.3、从库与主机建立同步
以下为建立主从同步最基本的 6 个项:change master to
master_host= xxx.xxx.xxx.xxx , # 主库 IP
master_port=6001, # 主库 mysqld 的端口
master_user= repl , # 主库中创建的有 REPLICATION SLAVE 权限的用户
master_password= xxxxxxxx , # 该用户的密码
master_log_file= mysql-bin.000xxx , # 已在导入时指定了
master_log_pos=xxxxxx; #已在导入时指定了
start slave;
例子:
master_log_file 和 master_log_pos 通过在主库上使用命令获得:
show master status \G;
在从库上执行:
change master to
master_host= 192.168.159.128 ,
master_port=3306,
master_user= repl_user ,
master_password= 123456 ,
master_log_file= mysql-bin.000001 ,
master_log_pos=1071;
start slave;
二、主从复制状态检查及异常处理
1、主从复制状态检查
主库查看 show master status\G
File: mysql-bin.000303
Binlog_Do_DB:
show master status\G
Position: 18711563
从库:
Master_Log_File: mysql-bin.000303–IO_threadRead_Master_Log_Pos: 18711563–IO_threadRelay_Master_Log_File: mysql-bin.000303–sql_threadExec_Master_Log_Pos: 18711163–sql_thread span =
b、通过 show slave status\G 查看错误信息:show slave status\G
Last_SQL_Errno: 1062
Last_SQL_Error: Error Duplicate entry 1 for key PRIMARY on query. Default database:
test . Query: insert into test values(1,2,3,4,5,6)
c、通过错误日志查看错误信息:
140828 16:27:51 [ERROR] Slave SQL: Error Duplicate entry 1 for key PRIMARY on query.
Default database: test . Query: insert into test values(1,2,3,4,5,6) ,
Error_code: 1062
140828 16:27:51 [Warning] Slave: Duplicate entry 1 for key PRIMARY Error_code: 1062
140828 16:27:51 [ERROR] Error running query, slave SQL thread aborted. Fix the problem,
and restart the slave SQL thread with SLAVE START . We stopped at log
mysql-bin.000303 position 18711163
根据这些报错信息,往往就能够定位到发生异常的原因。如果我们了解产生异常的具体事件,而且能够掌控,可以通过设置 sql_slave_skip_counter 参数来跳过当前错误。set global sql_slave_skip_counter=1;
a、直接 set global sql_slave_skip_counter=n;(n 设置很大的值,即:跳过所有错误),
b、设置 slave_skip_errors=all; 跳过所有类型的错误
c、直接查看主库的 binlog,然后在从库上直接执行 change master to。
这些方法都会导致主从数据不一致。
如果发现从库与主库差异太大,无法通过手动操作或数据修改重新建立同步。可以参考上述 MySQL 主从复制搭建 重新搭建从库。
4、主从复制延迟
主从复制延迟,可能的原因有:
a、主从同步延迟与系统时间的关系,查看主从两台机器间系统时间差
b、主从同步延迟与压力、网络、机器性能的关系,查看从库的 io,cpu,mem 及网络压力
c、主从同步延迟与 lock 锁的关系(myisam 表读时会堵塞写),尽量避免使用 myisam 表。一个实例里面尽量减少数据库的数量。
d、主从复制发生异常而中断,过很久之后才发现复制异常。可通过查看 master 与 slave 的 status 估算相差的日志。如果相差太大,则可以考虑重做从库。
5、MYSQL 启动报错
MYSQL 启动时报错:
Another MySQL daemon already running with the same unix socket
原因多个 Mysql 进程使用了同一个 socket。
两个方法解决:
第一个是立即关机 使用命令 shutdown -h now 关机,关机后在启动,进程就停止了。
第二个直接把 mysql.sock 文件改名即可。也可以删除,推荐改名。
然后就可以启动 mysql 了。
6、ERROR-2013 报错
ERROR-2013 报错代码,可能造成的原因是
[ERROR] Slave I/O: error connecting to master repl_user@192.168.159.128:3306 – retry-time: 60 retries: 86400, Error_code: 2013
iptables -F
setenforce 0
7、ERROR-1045 报错
Last_IO_Errno: 1045
Last_IO_Error: error connecting to master repl_user@192.168.159.128:3306 – retry-time: 60 retries: 86400
必须使用以下方法授权
select password(123456
GRANT REPLICATION SLAVE ON *.* TO repl_user @ % IDENTIFIED BY PASSWORD *6BB4837EB74329105EE4568DDA7DC67ED2CA2AD9
感谢各位的阅读,以上就是“MYSQL 主从搭建的方法是什么”的内容了,经过本文的学习后,相信大家对 MYSQL 主从搭建的方法是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是丸趣 TV,丸趣 TV 小编将为大家推送更多相关知识点的文章,欢迎关注!