MySQL中的复制mysql
实验须要两台Linux主机:他们的IP地址为192.168.0.28(主)和192.168.0.29(从)
主服务器端:
1.确保在服务器和从服务器上安装的MySQlL兼容。理想状况,应在主服务器和从服务器上使用最近版本的MySQL。sql
2.在主服务器上为服务器设置一个链接帐户。该帐户必须授予REPLICATION SLAVE权限。若是帐户仅用于复制(推荐这样作),则不须要再授予任何其它权限。
mysql> GRANT REPLICATION SLAVE,REPLICATION ON *.* TO 'myadmin'@'192.168.0.29' IDENTIFIED BY 'myadmin';shell
3.确保主服务器主机上my.cnf文件的[mysqld]部分包括一个log-bin选项。该部分还应有一个server-id=Master_id选项,其中master_id必须为1到232–1之间的一个正整数值。例如:
[mysqld]
log-bin=mysql-bin
server-id=1
若是没有提供那些选项,应添加它们并重启服务器。数据库
从服务器端:
1.确保从服务器分配了一个惟一的服务器ID号;在其my.cnf文件中添加下面的行:
[mysqld]
server-id=2缓存
2.在从服务器上执行下面的语句,为每一个选项填入适当的值:
mysql> CHANGE MASTER TO
-> MASTER_HOST='192.168.0.28',
-> MASTER_USER='myadmin',
-> MASTER_PASSWORD='myadmin',
-> MASTER_LOG_FILE='recorded_log_file_name',
-> MASTER_LOG_POS='0';安全
3. 在从服务器上执行START SLAVE语句。服务器
mysqladmin:用于管理MySQL服务器的客户端。mysqladmin是一个执行管理操做的客户程序。能够用它来检查服务器的配置和当前的状态,建立并删除数据库等等。
shell> mysqladmin [options] command [command-options] [command [command-options]] ...
mysqladmin支持下面的命令:
create db_name 建立一个名为db_name的新数据库。
debug 告诉服务器向错误日志写入调试信息。
drop db_name 删除名为db_nam的数据库和全部表。
extended-status 显示服务器状态变量及其值。
flush-hosts 刷新主机缓存中的全部信息。
flush-logs 刷新全部日志。
flush-privileges 重载受权表(相似reload)。
flush-status 清除状态变量。
flush-tables 刷新全部表。
flush-threads 刷新线程缓存。
kill id,id,... 杀掉服务器线程。
password new-password 设置一个新密码。将用mysqladmin链接服务器使用的 帐户的密码更改成new-password。
ping 检查服务器是否仍活动。
processlist 显示活动服务器线程的列表。
reload 重载受权表,至关于flush-privileges。
refresh 刷新全部表并关闭和打开日志文件,至关于flush-hosts和flush-logs。
shutdown 中止服务器。
start-slave 开始从服务器上的复制。
status 显示短服务器状态消息。
stop-slave 中止从服务器上的复制。
variables 显示服务器系统变量及其值。
version 显示服务器的版本信息。分布式
下述存储引擎是最经常使用的:
MyISAM:默认的MySQL插件式存储引擎,它是在Web、数据仓储和其余应用环境下最常使用的存储引擎之一。注意,经过更改STORAGE_ENGINE配置变量,可以方便地更改MySQL服务器的默认存储引擎。ide
InnoDB:用于事务处理应用程序,具备众多特性,包括ACID事务支持。工具
BDB:可替代InnoDB的事务引擎,支持COMMIT、ROLLBACK和其余事务特性。
Memory:将全部数据保存在RAM中,在须要快速查找引用和其余相似数据的环境下,可提供极快的访问。
Merge:容许MySQL DBA或开发人员将一系列等同的MyISAM表以逻辑方式组合在一块儿,并做为1个对象引用它们。对于诸如数据仓储等VLDB环境十分适合。
Archive:为大量不多引用的历史、归档、或安全审计信息的存储和检索提供了完美的解决方案。
Federated:可以将多个分离的MySQL服务器连接起来,从多个物理服务器建立一个逻辑数据库。十分适合于分布式环境或数据集市环境。
Cluster/NDB:MySQL的簇式数据库引擎,尤为适合于具备高性能查找要求的应用程序,这类查找需求还要求具备最高的正常工做时间和可用性。
Other:其余存储引擎包括CSV(引用由逗号隔开的用做数据库表的文件),Blackhole(用于临时禁止对数据库的应用程序输入),以及Example引擎(可为快速建立定制的插件式存储引擎提供帮助)。
MySQL的备份与还原
mysqldump命令产生的.sql文件包含一系列SQL INSERT语句,能够用来重载转储的表。
mysqldump
--all-databases 备份全部的数据库
--database db_name1 备份数据库db_name1
--databases db_name1 db_name2 备份多个数据库db_name1,db_name2
--flush-logs 做日志滚动
--lock-all-tables 锁定全部表
--no-data 只备份表结构,不备份数据
--replace 使用replace取代insert
--opt 使用扩在选项
--where"表达式" 使用where语句限定备份
可以使用下例命令恢复数据库:
shell>mysql -uroot -p < back.sql
或使用:mysql>source back.sql
可恢复数据库。
SELECT INTO OUTFILE对具体文件进行选择备份:
要想复制表,使用SELECT * INTO OUTFILE 'file_name' FROM tbl_name。
要想重载表,使用LOAD DATA INFILE 'file_name' INTO TABLE tblname 并恢复。
要避免复制记录,表必须有PRIMARY KEY或一个UNIQUE索引。当新记录复制惟一键值的旧记录时,REPLACE关键字能够将旧记录替换为新记录。
mk-parallel-backup是一款开源软件:
要想备份数据库可以使用命令为:
mk-parallel-dump --basedir = /backs
要想还原数据库应使用命令为:
mk-parallel-restare /backs
mysqlhotcopy在数据目录所在的服务器上执行此命令,数据库引擎为MyISAM,近乎于冷备份,命令格式为:
mysqlhotcopy mydb /backup 本地主机数据库备份
mysqlhotcopy --method=scp mydb username@backup.company.com:/backup 远程主机数据库备份
恢复数据库只需把备份文件目录拷贝到相应目录下便可。
mysqlbinlog:用于处理二进制日志文件的实用工具
服务器生成的二进制日志文件写成二进制格式。要想检查这些文本格式的文件,应使用mysqlbinlog实用工具。mysqlbinlog命令的使用方法:
shell> mysqlbinlog [options] log-files...
要想显示二进制日志binlog.000003的内容,使用下面的命令:
shell> mysqlbinlog binlog.0000003
可用下面命令来备份日志:
shell>mysqlbinlog mysql-bin.000003 > mysql-bin00003.sql
对于企业备份数据库,备份结束后必定要检测数据库是否备份成功。