mysql-utilites工具的使用
1.数据库层面的使用和mysql-utiltes的安装
mysql-utilities的安装
1.yum安装
rpm -Uvh http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
yum install mysql-utilities -y
2.源码包安装:
wget https://dev.mysql.com/get/Downloads/Connector-Python/mysql-connector-python-2.1.7.tar.gz
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
wget https://dev.mysql.com/get/Downloads/MySQLGUITools/mysql-utilities-1.6.5.tar.gz
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
查看加密文件信息
mysql_config_editor print --login-path=instance-3306
[instance-3306]
user = root
password = *****
host = localhost
port = 3306
一旦配置就只需要指定.mylogin.cnf文件中的服务器段进行连接,
mysqlserverinfo --srever=instance-3306 --format=vertical
参数:
--server :指定上面的.mylogin.cnf文件的名称,例如:instance
--format : 显示输出的结果格式,默认是网格,这里使用垂直格式
======================================================================
mysqldbcompare命令的使用
首先给予权限
grant create temporary tables,select,insert,super,show view,create view on *.* to root@'192.168.1.%' 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语句的转换报告,以转换反向定义的对象定义,
2.系统层面的介绍
mysqldiskusage 命令的使用
查看数据库的大小
mysqldiskusage --server=instance-3306
显示数据库,日志等大小
mysqldiskusage --server=instance-3306 --format=g -a -vvv
查看mysql数据库的冗余索引
mysqlindexcheck --server=instance-3306 --show-drops --show-indexes --stats --report-indexes -vvv yjkj_copy(库名)
mysqlfrm : 当服务器崩溃了,没法正常开启,而又要恢复数据时,这个命令就可以使用,可以恢复一些数据
mysqlfrm --basedir=/usr/local/mysql/ --port=3326 --user=root /usr/local/mysql/data/yjkj/up.frm
frm文件所在目录
--basedir : mysql的家目录
--port :指定一个没有占用的端口,如果端口被占用了,则会报错。
mysqluserclone:克隆新的用户和被克隆的用户权限一样
mysqluserclone --source=instance-3306 --destination=root:123@localhost root@localhost repl:123@'192.168.1.83'
mysqlrplsync:检查主从之间的数据是否一致
基于GTID的主从复制
在从端进行测试
mysqlrplsync --master=repl:123@192.168.1.83 --slaves=root:123@localhost -vvv
也可以使用隐藏文件测试
mysqlrplsync --master=root:123@192.168.1.83 --slaves=instance-3306 yk.hh
进行测试:
mysqlrplsync --master=root:123@192.168.1.111:3306 --slave=root:123@192.168.1.115:3306 --rpl-timeout=20 --checksum-timeout=2 --exclude=mysql,performance_schema,information_schema,aaa,redmine,db1 --checksum-timeout=10
参数:--rpl-timeout 等待同步的最大超时(等待等待主人的等待)。默认值为300
--execlude 排除那些库和表不进行比较
--checksum-timeout 最大超时秒等待查询完成校验。默认值= 5。
3.服务器层面的使用
mysqlserverclone命令的使用
是在同一台服务器上创建实例
mysqlserverclone --server=instance-3306 --new-data=/mysql/data/ --new-port=3336 --root-password=123 --new-id=3336 --user=mysql -vvv
连接控制台
/usr/local/mysql/bin/mysql -umysql -S /mysql/data/mysql.sock
mysqlserverinfo的命令使用
mysqlserverinfo --server=instance-3306 -d --format=vertical --show-defaults --no-headers --show-servers
参数
--show-defaults : 查看共同默认设置的配置文件
--show-servers : 查看本机上运行的mysql服务,显示所有服务的进程ID和数据目录
可以查看多个服务实例,需要指定多个 --server 选项

浙公网安备 33010602011771号