如何编写这里脚本

分享于 

3分钟阅读

互联网

  繁體 雙語

问题:

我希望能够将mysqdump从远程服务器复制到本地计算机。

我有一个脚本可以做到这一点,但我们的操作人员现在已经更改了服务器权限,。

因这里,在我可以从我的机器登录以 root 并提供密码并连接到mysql之前,我在Perl脚本中有一个命令:


sshpass -p root_password ssh root@$servername mysqldump $database_name> $mysqldump_location



无论如何,权限已经更改,我无法使用本地计算机上的root 登录。

现在我需要

  • 使用部署用户登录到远程服务器。
  • 登录后,我需要使用su来获取 root 用户
  • 现在我可以执行命令( 部署用户获得拒绝的消息)

我想要从本地计算机执行脚本或者命令,并将它的执行到 switch,root,创建一个本地机器。

那最好的方法是什么? 使用SSH隧道有可能? 或者是一个脚本选项更好的( 如何编写多个登录的脚本)?


回答 1:

你最好使用ansible来实现这里目的: https://docs.ansible.com/ansible/2.5/modules/mysql_db_module.html

。来处理sudo如何 done。

例如 mysqldump.yml playbook包含:


- hosts: all


 gather_facts: false


 serial: 1


- name: Dump all databases to hostname.sql


 mysql_db:


 state: dump


 name: all


 target:/tmp/{{ inventory_hostname }}.sql



。然后针对你的mysql box,像这样:


$ ansible-playbook -i ${servername}, mysqldump.yml -kK -v


SSH password: <your non-root password on target>


SUDO password[defaults to SSH password]: <usually hit return>




回答 2:

如果你在Linux操作系统上运行MySQL命令,就不需要在Linux上运行,只要在你的个人 Linux accountby中添加 root 用户名和 root 密码即可添加到脚本( 可能会更改你编写数据库转储的文件系统位置) 中。

甚至更好地为MySQL备份创建一个专用用户,这样你就不需要过多的DBA特权来。


CREATE USER 'backup'@'localhost' IDENTIFIED BY 's3cr3t-p@ssw0rd';



可以与INNODB表一起使用的--single-transaction需要以下特权:


GRANT SELECT, SHOW VIEW, RELOAD, REPLICATION CLIENT, EVENT, TRIGGER ON *.* TO 'backup'@'localhost';



MyISAMB --lock-all-tables用于表还需要锁定表角色:


GRANT LOCK TABLES ON *.* TO 'backup'@'localhost';





THIS  
相关文章