|
mysql-utilities的安装
1.yum安装
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql-utilities -y
2.源码包安装:
tar xf mysql-connector-python-2.1.7.tar.gz
cd mysql-connector-python-2.1.7
python setup.py build
python setup.py install
tar xf mysql-utilities-1.6.5.tar.gz
cd mysql-utilities-1.6.5
python setup.py build
python setup.py install
连接mysql的方法:
1.login-paths:加密不可见的
生成加密文件:
格式:
login-path=name --host=localhost(默认) --user= --port= --socket= --password
port和socket是可选项,二者指定一个就行
生成加密文件时,至少指定一个用户、一个主机名、一个port或者一个socket
./mysql_config_editor set --login-path=instance-3306 --host=localhost --user=root --port=3306 --password
查看加密文件信息
/usr/local/mysql/bin/mysql_config_editor print --login-path=instance-3306
[instance-3306]
user = root
password = *****
host = localhost
port = 3306
一旦配置就只需要指定.mylogin.cnf文件中的服务器段进行连接,
/usr/bin/mysqlserverinfo --srever=instance-3306 --format=vertical
参数:
--server :指定上面的.mylogin.cnf文件的名称,例如:instance
--format : 显示输出的结果格式,默认是网格,这里使用垂直格式
======================================================================
mysqldbcompare命令的使用
首先授权
grant create temporary tables,select,insert,super,update,delete,process,replication slave on *.* to root@'192.168.0.%' identified by '123';
mysqldbcompare --server1=root:pwssword@127.0.0.1:3006 --server2=root:password@127.0.0.1:3006 dbname:dbname --changes-for=server1 --difftype=sql
两个库的比较:
mysqldbcompare --server1=root:123@127.0.0.1:3306 db1:db2 --changes-for=server1 --difftype=sql
参数:
db1:db2 : 这是一台mysql服务器的两个库的比较;
--changes-for : 控制着差异报告,还是转换报告,
--changes-for=server1 :针对server1,以server2为参照物
--changes-for=server2 : 针对server2,以server1为参照物
--difftype : 指定不同的显示格式(sql|differ|context|unified)选项生产差异的SQL语句
--disable-binary-logging :如果开启了二进制日志,不想比较日志,则添加这个选项;
--run-all-tests :首次发现差异时不中止
-all :检测所有的库
1.首先:创建mysql的索引
2.其次才能使用mysqldbcompare命令修改
mysqldbcompare --server1=root:123@127.0.0.1 --server2=root:123@192.168.1.183 yjzh:yjkj --changes-for=server1 --difftype=sql --run-all-tests
本地两个库的对比
mysqldbcompare --server1=root123@localhost yjkj:yjzh --run-all-tests
mysqldbcompare --server1=instance-3306 --server2=root:123@192.168.1.83:3306 yjkj:text --changes-for=server1 --run-all-tests --difftype=sql --show-reverse -vvv
参数:
--difftype=sql 选项生产差异的SQL语句,同时,使用 --show-reverse选项可以显示出双方的SQL语句
mysqldbcopy的用法:
同一台服务器进行拷贝,库的名称不能一样
mysqldbcopy --source=instance-3306 --destination=instance-3306 yjkj:yjkj_copy -vvv --drop-first --locking=lock-all
参数:
--locking= : 进行锁库 参数有 no-lock(不使用任何表锁) lock-all(使用表锁,无事务和一致性读) snapshot(默认,单一事务的一致性读)
--source= :指定源数据库
--distination= : 制定目标数据库
--drop-first : 删除新的后者已经存在的库
在两台服务器上进行数据库的拷贝(在源地址上开启二进制日志)
192.168.1.83
[root@localhost ~]# mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=root:123@localhost:3306 yjkj:text -vvv --drop-first --locking=lock-all --rpl=master --rpl-user=root
参数:
-vvv :操作的详细过程
--rpl= :指定角色,master、slave
--rpl-user= :选项指定复制的用户名和密码
mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306 yjkj:tt -vvv --drop-first --locking=lock-all --rpl=master --rpl-user=root
当所在的服务器作为目标地址的时候
--destination= 可以使用mysql_config_editor生成的加密文件信息,上例中的install_3306
如果要复制的数据库的服务器上启用了GTIDs(GTID_MODE = ON),如果只复制其中一部分数据库,将会有警告信息产生。这是因为GTID报表生成包括所有数据库的gtids,不仅仅是某个的。
如果有启用GTID,但是使用了--skip-gtid也会收到警告。
如果启用了GTID,最好是复制所有的数据库。
当复制数据和包含GTID命令,可能会遇到"GTID_PURGED can only be set when GTID_EXECUTED is empty"错误。产生的原因是目标服务器不是一个干净的复制状态。解决办法是在复制之前,先在目标服务器上执行 RESET MASTER 命令,清空复制状态
3.不想拷贝库中的一个表
mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306 -vvv --exclude=yjkj.up yjkj:text
参数:
--exclude= : 指定哪个库那张表不拷贝
4.可以使用正则
mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306 -vvv --regexp --exclude=^u yjkj:text --drop-first
解释:默认情况下是LIKE匹配。使用正则,需要指定--regexp选项,同时,正则表达式只需写对象的匹配模式,不必加上数据库名
mysqldbcopy命令所需要的权限
源服务器:SELECT, SHOW VIEW, EVENT ,TRIGGER
目标服务器:CREATE, ALTER, SELECT, INSERT, UPDATE, LOCK TABLES, DROP,SUPER权限取决于对象DEFINER的值。
如果在复制过程中出现错误,复制中止了,目标数据库可能不一致了。在这种情况下,删除已复制的数据库,修复失败的原因,然后再次复制。
mysqldbcopy改变存储引擎
将新拷贝的数据库在目标服务器上使用MyISAM引擎,只需使用 --new-storage-engine
mysqldbcopy --source=root:123@192.168.1.24:3306 --destination=install_3306 -vvv --regexp --exclude=^u yjkj:text --new-storage-engine=myisam --drop-first
mysqldbexport 导出命令的使用
192.168.1.24
只导出定义语句
mysqldbexport --server=instance-3306 --format=sql yjkj --export=definitions > data.sql
参数:
--format :导出的格式
只导出数据,且是批量插入语句
mysqldbexport --server=install_3306 --format=sql yjkj --export=data --bulk-insert
参数: --bulk-insert : 批量插入
如果导出的库中表的引擎并不是单一的,为了确保数据的一致性,到处前需要锁表,加上参数 --locking=lock-all
为当前的数据库创建一个从服务器
mysqldbexport --server=instance_3306 --format=sql ttlsa_com --export=both --rpl-user=root --rpl=master
# Connecting to the current server as master
CHANGE MASTER TO MASTER_HOST = 'localhost', MASTER_USER = 'root', MASTER_PASSWORD = '', MASTER_PORT = 3306, MASTER_LOG_FILE = 'mysql-bin.000001', MASTER_LOG_POS = 120;
START SLAVE;
在新的服务器上执行上面的命令
mysqldbimport 导出命令的使用
mysqldbimport --server=instance-3306 --import=definitions --format=sql data.sql
如果创建的新的主从,在导入数据的时候要先执行'reset master'
mysqldiff :用来比较对象的定义是否相同并显示不同的地方,mysqldiff 是通过对象名称来进行比较的,如果比较数据是否相同则使用mysqldbcompare
不同服务器的两个库进行比较
mysqldiff --server1=instance-3306 --server2=root:123@192.168.1.83:3306 yjkj:yjkj --difftype=sql --show-reverse -vvv
mysqldiff --server1=instance-3306 --server2=root:123@192.168.1.83:3306 yjkj:text --changes-for=server2 --difftype=sql --show-reverse -vvv
同台服务器的两个库进行比较
mysqldiff --server1=instance-3306 yjkj:yjkj_copy --difftype=sql --show-reverse -vvv
参数:
--show-reverse :生成包含SQL语句的转换报告,以转换反向定义的对象定义,
|
|
|