- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章linux系统下实现mysql热备份详细步骤(mysql主从复制)由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
主从的作用:
1.可以当做一种备份方式 。
2.用来实现读写分离,缓解一个数据库的压力 。
MySQL主从备份原理:
Mysql的主从复制至少是需要两个Mysql的服务,当然Mysql的服务是可以分布在不同的服务器上,也可以在一台服务器上启动多个服务.
如果想配置成为同一台上的话,注意安装的时候,选择两个不同的prefix=路径,同时开启服务器的时候,端口不能相同.
(1)首先确保主从服务器上的Mysql版本相同(做主从服务器的原则是,MYSQL版本要相同,如果不能满足,最起码从服务器的MYSQL的版本必须高于主服务器的MYSQL版本 ) 。
(2)在主服务器上,设置一个从数据库的账户,使用REPLICATION SLAVE赋予权限,如
mysql> GRANT REPLICATION SLAVE ON *.* TO 'slave001'@'192.168.0.99' IDENTIFIED BY 。
。
'123456',
Query OK, 0 rows affected (0.13 sec) 。
。
[原理]master 上提供binlog .
slave 通过 I/O线程从 master拿取 binlog,并复制到slave的中继日志中 。
slave 通过 SQL线程从 slave的中继日志中读取binlog ,然后解析到slave中 。
主从复制大前提 。
需要master与slave同步,因为笔者的数据库数据量不大,所以无需考虑太多,直接把 。
master上的data复制到了slave上,但是如果是大的数据量,比如像taobao这个的系统 。
实验环境准备:
OS: CentOS5.4 。
Mysql:Mysql-5.0.41.tar.gz 辅助工具:SSH Secure Shell Client 。
两台测试IP&服务器:
安装配置步骤:
。
1、首先在Linux环境下分配好磁盘分区以便留足MySQL数据库的备份空间 。
。
2、MySQL数据库的安装:
1>将Mysql-5.0.41.tar.gz通过SSH 工具 上传到Linux系统的home目录下 。
2>建立MySQL使用者和群组
。
3>解压缩Mysql-5.0.41.tar.gz源码包 。
。
。
4>进入源码目录编译安装 。
。
5>替换/etc/my.cnf文件,进入源码包,执行命令 。
6>完成以上操作以后进行初始化数据库,进入已经安装好的mysql目录 。
。
7>设置给mysql和root用户设定访问权限 我们先进入mysql目录 。
。
8>启动mysql,进入已经安装好的目录 。
。
9> 修改mysql数据库超级用户root的缺省密码
。
关闭mysql服务器 。
。
10>设定开机就启动mysql,进入源码目录下 。
# cd /home/Mysql-5.0.41 # cp support-files/mysql.server /etc/init.d/mysql 。
。
# chmod +x /etc/init.d/mysql # chkconfig --level 345 mysql on # service mysql restart Shutting down MySQL. [ 确定 ] Starting MySQL [ 确定 ] [root@localhost mysql]# 。
。
到这里MySQL就装好了。 。
3、配置MySQL5.0的复制(Replication)功能 。
一.将master设置为只读.
mysql> flush tables with read lock,
二.用master中的data文件夹替换slave中的data文件夹 。
比如 用 tar zcvf mysql_data.gz /media/raid10/mysql/3306/data 。
然后 mv mysql_data.gz /media/raid10/htdocs/blog/wordpress/ 。
因为我的 /media/raid10/htdocs/blog/wordpress/ 是 Nginx 的主目录 。
所以可以在 slave上,用wget下载这个文件,然后 解压,并覆盖slave上的data文件 。
注意:覆盖之前最好备份源文件 。
三.配置master的my.cnf,添加以下内容 。
在[mysqld]配置段添加如下字段 。
。
server-id=1 。
。
log-bin=/media/raid10/mysql/3306/binlog/binlog //这里写你的binlog绝对路径名 。
binlog-do-db=blog //需要同步的数据库,如果没有本行,即表示同步所有的数据库 。
binlog-ignore-db=mysql //被忽略的数据库 。
。
。
这里给出我的my.cnf配置文件 。
。
[client] 。
。
character-set-server = utf8 。
port = 3306 。
socket = /tmp/mysql.sock 。
[mysqld] 。
character-set-server = utf8 。
replicate-ignore-db = mysql 。
replicate-ignore-db = test 。
replicate-ignore-db = information_schema 。
user = mysql 。
port = 3306 。
socket = /tmp/mysql.sock 。
basedir = /usr/local/webserver/mysql 。
datadir = /media/raid10/mysql/3306/data 。
log-error = /media/raid10/mysql/3306/mysql_error.log 。
pid-file = /media/raid10/mysql/3306/mysql.pid 。
open_files_limit = 10240 。
back_log = 600 。
max_connections = 5000 。
max_connect_errors = 6000 。
table_cache = 614 。
external-locking = FALSE 。
max_allowed_packet = 16M 。
sort_buffer_size = 1M 。
join_buffer_size = 1M 。
thread_cache_size = 300 。
#thread_concurrency = 8 。
query_cache_size = 20M 。
query_cache_limit = 2M 。
query_cache_min_res_unit = 2k 。
default-storage-engine = MyISAM 。
thread_stack = 192K 。
transaction_isolation = READ-COMMITTED 。
tmp_table_size = 20M 。
max_heap_table_size = 20M 。
long_query_time = 3 。
log-slave-updates 。
log-bin = /media/raid10/mysql/3306/binlog/binlog 。
binlog-do-db=blog 。
binlog-ignore-db=mysql 。
binlog_cache_size = 4M 。
binlog_format = MIXED 。
max_binlog_cache_size = 8M 。
max_binlog_size = 20M 。
relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog 。
relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog 。
relay-log = /media/raid10/mysql/3306/relaylog/relaylog 。
expire_logs_days = 30 。
key_buffer_size = 10M 。
read_buffer_size = 1M 。
read_rnd_buffer_size = 6M 。
bulk_insert_buffer_size = 4M 。
myisam_sort_buffer_size = 8M 。
myisam_max_sort_file_size = 20M 。
myisam_repair_threads = 1 。
myisam_recover 。
interactive_timeout = 120 。
wait_timeout = 120 。
skip-name-resolve 。
#master-connect-retry = 10 。
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 。
#master-host = 192.168.1.2 。
#master-user = username 。
#master-password = password 。
#master-port = 3306 。
server-id = 1 。
innodb_additional_mem_pool_size = 16M 。
innodb_buffer_pool_size = 20M 。
innodb_data_file_path = ibdata1:56M:autoextend 。
innodb_file_io_threads = 4 。
innodb_thread_concurrency = 8 。
innodb_flush_log_at_trx_commit = 2 。
innodb_log_buffer_size = 16M 。
innodb_log_file_size = 20M 。
innodb_log_files_in_group = 3 。
innodb_max_dirty_pages_pct = 90 。
innodb_lock_wait_timeout = 120 。
innodb_file_per_table = 0 。
#log-slow-queries = /media/raid10/mysql/3306/slow.log 。
#long_query_time = 10 。
[mysqldump] 。
quick 。
max_allowed_packet = 32M 。
。
。
四.在master机上为slave机添加一同步帐号 。
。
mysql> grant replication slave on *.* to 'admin'@'172.29.141.115' identified by '12345678',
。
mysql> flush privileges ,
。
。
五.配置slave的my.cnf,添加以下内容 。
注意
1.如果mysql是5.5.3-m3 的版本,只需 。
在[mysqld]字段下添加如下内容 。
server-id=2 。
2.如果是5.0x的版本,需要 。
在[mysqld]字段下添加如下内容 。
。
server-id=2 。
。
log-bin=mysql-bin //这是同步的binlog,具体以你的binlog为准 。
master-host=172.29.141.112 。
master-user=admin 。
master-password=12345678 。
master-port=3306 。
master-connect-retry=60 //如果发现主服务器断线,重新连接的时间差; 。
replicate-do-db=blog //同步的数据库,不写本行 表示 同步所有数据库 。
replicate-ignore-db=mysql //不需要备份的数据库 。
log-slave-update 。
slave-skip-errors 。
。
我的mysql是5.5.3,这里给出我的slave my.cnf配置文件 。
。
[client] 。
。
character-set-server = utf8 。
port = 3306 。
socket = /tmp/mysql.sock 。
。
[mysqld] 。
character-set-server = utf8 。
replicate-ignore-db = mysql 。
replicate-ignore-db = test 。
replicate-do-db = blog 。
replicate-ignore-db = information_schema 。
user = mysql 。
port = 3306 。
socket = /tmp/mysql.sock 。
basedir = /usr/local/webserver/mysql 。
datadir = /media/raid10/mysql/3306/data 。
log-error = /media/raid10/mysql/3306/mysql_error.log 。
pid-file = /media/raid10/mysql/3306/mysql.pid 。
open_files_limit = 10240 。
back_log = 600 。
max_connections = 5000 。
max_connect_errors = 6000 。
table_cache = 614 。
external-locking = FALSE 。
max_allowed_packet = 16M 。
sort_buffer_size = 1M 。
join_buffer_size = 1M 。
thread_cache_size = 300 。
#thread_concurrency = 8 。
query_cache_size = 20M 。
query_cache_limit = 2M 。
query_cache_min_res_unit = 2k 。
default-storage-engine = MyISAM 。
thread_stack = 192K 。
transaction_isolation = READ-COMMITTED 。
tmp_table_size = 20M 。
max_heap_table_size = 20M 。
long_query_time = 3 。
log-slave-updates 。
log-bin = /media/raid10/mysql/3306/binlog/binlog 。
binlog_cache_size = 4M 。
binlog_format = MIXED 。
max_binlog_cache_size = 8M 。
max_binlog_size = 20M 。
relay-log-index = /media/raid10/mysql/3306/relaylog/relaylog 。
relay-log-info-file = /media/raid10/mysql/3306/relaylog/relaylog 。
relay-log = /media/raid10/mysql/3306/relaylog/relaylog 。
expire_logs_days = 30 。
key_buffer_size = 10M 。
read_buffer_size = 1M 。
read_rnd_buffer_size = 6M 。
bulk_insert_buffer_size = 4M 。
myisam_sort_buffer_size = 8M 。
myisam_max_sort_file_size = 20M 。
myisam_repair_threads = 1 。
myisam_recover 。
interactive_timeout = 120 。
wait_timeout = 120 。
skip-name-resolve 。
#master-connect-retry = 60 。
slave-skip-errors = 1032,1062,126,1114,1146,1048,1396 。
#master-host=172.29.141.112 。
#master-user = admin 。
#master-password = 12345678 。
#master-port = 3306 。
server-id = 2 。
innodb_additional_mem_pool_size = 16M 。
innodb_buffer_pool_size = 20M 。
innodb_data_file_path = ibdata1:56M:autoextend 。
innodb_file_io_threads = 4 。
innodb_thread_concurrency = 8 。
innodb_flush_log_at_trx_commit = 2 。
innodb_log_buffer_size = 16M 。
innodb_log_file_size = 20M 。
innodb_log_files_in_group = 3 。
innodb_max_dirty_pages_pct = 90 。
innodb_lock_wait_timeout = 120 。
innodb_file_per_table = 0 。
#log-slow-queries = /media/raid10/mysql/3306/slow.log 。
#long_query_time = 10 。
[mysqldump] 。
quick 。
max_allowed_packet = 32M 。
。
六.通过查看master的状态(在master上查看),为配置slave做准备 。
。
mysql> show master status/G,
。
ERROR 2006 (HY000): MySQL server has gone away 。
No connection. Trying to reconnect... 。
Connection id: 13 。
Current database: blog 。
*************************** 1. row *************************** 。
File: binlog.000005 。
Position: 592 。
Binlog_Do_DB: blog 。
Binlog_Ignore_DB: mysql 。
1 row in set (0.01 sec) 。
ERROR
No query specified 。
。
从上面的信息,可以看出,master现在使用的binlog是binlog.000005,position是592,那么下面的slave配置必须与这个对应.
其实binlog.000005是当前master使用的binlog日志文件 。
position是当前master使用的binlog.000005日志文件的位置 。
简单理解为master正在使用哪个binlog的哪个数据行(位置).
七.如果是5.5.3-m3版本mysql,需要启动slave后,配置与master相关对应的信息(在slave上配置) 。
注意,这个与第六步相对应 。
。
mysql> stop slave ,
。
mysql> change master to master_host='172.29.141.112', master_user='admin', master_password='12345678', master_log_file='binlog.000005', master_log_pos=488; mysql> CHANGE MASTER TO MASTER_CONNECT_RETRY=60,
。
这个与5.0的配置my.cnf作用是一样的,配置成与master相对应的内容 。
主要是配置slave,让slave知道从master的哪个binlog上的哪个位置复制数据。所以需要知道master的ip,user_name,user_passwd,binlog,binlog_position以及多长时间连接一次master 。
八.开启slave 。
。
。
九.解除master只读限制,并做测试 。
mysql> unlock tables,
。
mysql> use blog,
mysql> create longxibendi ( a int, b int ),
十.从slave上查看 。
。
。
mysql> use blog,
。
mysql> show tables,
+-----------------------+ 。
| Tables_in_blog | 。
+-----------------------+ 。
| longxibendi | 。
| wp_commentmeta | 。
| wp_comments | 。
| wp_links | 。
| wp_options | 。
| wp_postmeta | 。
| wp_posts | 。
| wp_term_relationships | 。
| wp_term_taxonomy | 。
| wp_terms | 。
| wp_usermeta | 。
| wp_users | 。
+-----------------------+ 。
12 rows in set (0.00 sec) 。
可以看到成功了!! 。
。
十一.配置过程中,可以用 show slave status/G; 在 slave上 。
查看 slave的复制情况 。
十二.如果出现什么问题,可能是防火墙的问题 。
/etc/init.d/iptables stop 关闭 master 上的防火墙,或者进行相应的配置 。
常遇到的错误与解决:
1.[mysql]ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock' (2) 。
这个错误,网上有很多说法,其实直接的原因是mysql服务器没有启动 。
之前我按照5.0x配置master-slave,然后启动slave,在连接slave,就会报这个错误 。
后来发现原因是,mysql slave没有启动起来,然后去查错误日志,发现以下的字段 。
。
110505 01:55:20 mysqld_safe mysqld from pid file /media/raid10/mysql/3306/mysql.pid ended 。
。
110505 02:04:41 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data 。
InnoDB: The InnoDB memory heap is disabled 。
InnoDB: Mutexes and rw_locks use InnoDB's own implementation 。
110505 2:04:41 InnoDB: highest supported file format is Barracuda. 。
110505 2:04:41 InnoDB Plugin 1.0.6 started; log sequence number 44338 。
110505 2:04:41 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-connect-retry=60' 。
110505 2:04:41 [ERROR] Aborting 。
110505 2:04:41 InnoDB: Starting shutdown... 。
110505 2:04:43 InnoDB: Shutdown completed; log sequence number 44348 。
110505 2:04:43 [Note] /usr/local/webserver/mysql/libexec/mysqld: Shutdown complete 。
110505 02:04:43 mysqld_safe mysqld from pid file /media/raid10/mysql/3306/mysql.pid ended 。
110505 02:07:44 mysqld_safe Starting mysqld daemon with databases from /media/raid10/mysql/3306/data 。
InnoDB: The InnoDB memory heap is disabled 。
InnoDB: Mutexes and rw_locks use InnoDB's own implementation 。
110505 2:07:44 InnoDB: highest supported file format is Barracuda. 。
110505 2:07:45 InnoDB Plugin 1.0.6 started; log sequence number 44348 。
110505 2:07:45 [ERROR] /usr/local/webserver/mysql/libexec/mysqld: unknown variable 'master-host=172.29.141.112' 。
110505 2:07:45 [ERROR] Aborting 。
。
从上面的ERROR,知道 master-connect-retry=60这个my.cnf中的参数有问题,后来从网上搜资料,发现,mysql5.5.3-m3版本不支持这个参数, 。
然后我把这个参数注释掉,又发现不支持这个参数master-host,从上面的ERROR字段可以看出来。后来,就知道,5.5.3-m3不能按5.0.x那样配置 。
原来不需要从my.cnf中配置master相关信息,当然server-id是必须的。其他信息,通过 在命令行中 ,登陆 mysql服务器配置.
其实server-id的作用是 。
第一,标识,区分不同的slave,第二,防止环备份的发生 。
。
2.Last_Error: Last_SQL_Error:等错误 。
这个是从 slave上,运行 show slave status/G; 得到的。出现这个问题,最根本的原因是,slave 没有与当前的master的binlog 和binlog的position对应上 。
也就是说,slave传输的master binlog 不与当前master正使用的binlog以及binlog的行数对应.
。
3.[ERROR] Slave I/O: error connecting to master 'admin@172.29.141.112:3306' - retry-time: 60 retries: 86400, Error_code: 2003 。
这个就是因为防火墙的问题,所以用 /etc/init.d/iptables stop 关闭防火墙就OK了.
。
4.遇到ERROR 2013 (HY000): Lost connection to MySQL server during query错误。 在/ect/my.cnf的[mysqld]中添加skip-name-resolve 。
最后此篇关于linux系统下实现mysql热备份详细步骤(mysql主从复制)的文章就讲到这里了,如果你想了解更多关于linux系统下实现mysql热备份详细步骤(mysql主从复制)的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
如何启用 Mercurial(中央/主)存储库的自动(增量)备份? 我来自颠覆,在那里我能够制作一个提交 Hook ,将更改上传到 S3。 编辑: 如果这种策略对 Mercurial 没有意义,那么什
我想定期创建我的github存储库的备份。是否有一种快速的方法可以在不知道整个列表的情况下将它们全部拉出? 沃尔特 最佳答案 您可以通过GitHub的API获取整个列表: curl http://gi
我正在使用 flatpages在我在本地服务器上开发的站点中。我需要备份平面页面的数据以在最终服务器中使用它。有谁知道怎么做? 最佳答案 在您的本地服务器上运行: python manage.py d
我们已将应用服务升级到 S1,并希望设置自动备份。这是一个带有 SQL 数据库的 .net core 应用程序。对于数据库部分,我得到以下内容: No supported connection str
我们使用一些 阻止 blob 来存储一些持久资源,然后 用于存储事件数据的页面 blob 我们需要备份 blob,因此我尝试使用 AzCopy。它在我的开发机器上工作正常,但在其他慢速机器上失败,并出
关闭。这个问题需要更多 focused .它目前不接受答案。 想改进这个问题?更新问题,使其仅关注一个问题 editing this post . 5年前关闭。 Improve this questi
我正在看这个例子 docker run --rm --volumes-from myredis -v $(pwd)/backup:/backup debian cp /data/dump.rdb /b
我们使用一些 阻止 blob 来存储一些持久资源,然后 用于存储事件数据的页面 blob 我们需要备份 blob,因此我尝试使用 AzCopy。它在我的开发机器上工作正常,但在其他慢速机器上失败,并出
我目前正在使用 Java,并且正在寻找一个程序,该程序可以在每次编译时保存我正在执行的操作的新版本。我不介意它是否不运行,我可以进去编辑类名,使其与 .java 名称匹配。由于我是一个初学者,我总是因
在 RabbitMQ 管理控制台中,出于导入和导出目的,我在概览页面底部看到了导入/导出定义链接。但是有了这个,我能够导出整套队列、交换等。 我有一个 MQ 服务器,其中包含多个应用程序的 MQ 设置
我在 Eclipse IDE 中做了一个 Maven 项目,但在某些时候,我决定以其他名称复制并粘贴工作区位置中的文件夹,以避免在迄今为止工作正常的原始项目中进行一些错误配置,但是,我在执行中遇到了问
有没有办法备份在任何给定元素上设置的所有事件? 背景故事:我有一些代码,当用户将鼠标悬停在某个图标上时(想想悬停帮助文本),会显示绝对定位的“弹出窗口”。如果用户将鼠标悬停在弹出窗口上,它会停留在周围
我需要将 MySQL 数据库移动到新位置。根据workbench,数据库大小只有200MB,但有些表有数百万行,报告索引和数GB的数据长度。结果,EXPORT 的大小为 15GB,导出 DB 并将其复
我有一个工作数据库 - 我想复制它的所有数据(甚至只是其中的 1 个表)并在磁盘上创建备份,并在另一个位置(不是同一台计算机)上创建一个“备份”数据库。另一台计算机未连接到互联网 我该怎么做? 最佳答
我有一个实时数据库,我想要做的是制作一份副本。我可以通过 SSH 和 phpMyAdmin 访问 MySQl。是否有一个命令可以在单个命令/操作中复制/备份数据库,而无需使用导出/导入? 谢谢 最佳答
我是 PostgreSQL 的新手,我正在寻找备份数据库的方法。我知道有 3 种方法 pg_dump,快照和复制以及使用 WAL。您建议使用哪一个来完整备份数据库?如果可能,请提供代码片段。 最佳答案
如何快速备份/恢复mysql数据库中的数据? 最佳答案 mysqldump命令行备份最快, (使用mysql命令行恢复,mysql -u #username# -p #database# < #dum
从管理的角度来看,我是 MySQL 的新手。 在过去的几个小时里,我一直在谷歌上搜索,但没有成功,我想知道是否有人可以为我指明正确的方向,让我知道要用谷歌搜索什么或提出建议。 基本上,我正在寻找有关如
我需要备份创建模式附带的数据库(转储)。使用 putty(通过 SSH)完成这项工作的命令行是什么?我研究并思考了这个命令,但它只执行表备份和数据。 mysqldump -h HOST -u LOGI
我正在尝试创建一个将整个/dev/sda1 备份到/mnt/Backup 的 bash 脚本 /dev/sda1 457G 3.5G 431G 1% / /dev/sdb1
我是一名优秀的程序员,十分优秀!