MySQL管理工具MySQL Utilities — 复制在线测试用例数据库(23)

默北 MySQLMySQL管理工具MySQL Utilities — 复制在线测试用例数据库(23)已关闭评论7,974字数 2445阅读8分9秒阅读模式

对前面工具mysqlserverinfo, mysqlserverclone, mysqldbexport, mysqldbimport 的实际应用,在工作中,为了诊断问题,新增新功能,测试服务器数据也需要做出相应的更改,这就需要线上数据的副本,来确保解决方案适用于实际的服务器。在这种场景下,使用MySQL主从复制当然也是可行的。

创建一个新的实例,与线上的服务完全一样的选项和数据。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

实例

在开始之前,我们要弄清楚当前运行的实例的配置参数。可以使用mysqlserverinfo 工具来发现配置文件和my_print_defaults 工具来打印出默认的配置。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

shell> mysqlserverinfo --server=root:root@localhost \
          --format=vertical --show-servers
# 
# The following MySQL servers are active on this host:
#  Process id:   2377, Data path: /usr/local/mysql/data
#  Process id:   2478, Data path: /Volumes/Source/source/temp_13001
#  Process id:   2487, Data path: /Volumes/Source/source/temp_13002
# 
# Source on localhost: ... connected.
*************************       1. row *************************
         server: localhost:3306
        version: 5.1.50-log
        datadir: /usr/local/mysql/data/
        basedir: /usr/local/mysql-5.1.50-osx10.6-x86_64/
     plugin_dir: /usr/local/mysql-5.1.50-osx10.6-x86_64/lib/plugin
    config_file: /etc/my.cnf
     binary_log: my_log.000287
 binary_log_pos: 106
      relay_log: None
  relay_log_pos: None
1 row.
#...done.

shell> my_print_defaults mysqld /etc/my.cnf
--port=3306
--basedir=/usr/local/mysql
--datadir=/usr/local/mysql/data
--server_id=5
--log-bin=my_log
--general_log
--slow_query_log
--innodb_data_file_path=ibdata1:778M;ibdata2:50M:autoextend

shell> ps -f 2377
  UID   PID  PPID   C STIME   TTY     TIME CMD
   74  2377  2300   0 10:56AM ??      0:02.04 /usr/local/mysql/bin/mysqld --basedir=/usr/local/mysql \
                                              --datadir=/usr/local/mysql/data --user=mysql \
                                              --log-error=/logs/me.local.err --pid-file=/logs/me.local.pid \
                                              --port=3306

如此,我们就知晓了当前运行的实例的配置选项和参数。接下来可以使用mysqlserverclone 工具来克隆一个完全一样的实例,--mysqld选项需要指定下面的参数:文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

  • --log-bin=my_log
  • --general_log
  • --slow_query_log
  • --user=mysql
  • --log-error=<path>

并选择新的数据目录,如下:文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

shell> mysqlserverclone --server=root:root@localhost \
          --new-data=/source/temp_clone --new-port=3307 --root=root --delete \
          --new-id=123 --mysqld="--log-bin=my_log --general-log --slow-query-log \
          --user=mysql --log-error=/source/temp_clone"
# Cloning the MySQL server running on localhost.
# Creating new data directory...
# Configuring new instance...
# Locating mysql tools...
# Setting up empty database and mysql tables...
# Starting new instance of the server...
# Testing connection to new instance...
# Success!
# Setting the root password...
# Connection Information:
#  -uroot -proot --socket=/source/temp_clone/mysql.sock
#...done.

接下来,就是导入数据了文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

shell> mysqldbexport --server=root:root@localhost:3306 --export=both --all > data.sql
shell> mysqldbimport --server=root:root@localhost:3307 --import=both data.sql
# Source on localhost: ... connected.
# Importing definitions and data from data.sql.
#...done.

如果要复制所有的用户及其权限,需要使用mysqluserclone工具了。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

权限

对所有库的读取权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

对新数据目录的读写权限。文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/ 文章源自运维生存时间-https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/

weinxin
我的微信
微信公众号
扫一扫关注运维生存时间公众号,获取最新技术文章~
默北
  • 本文由 发表于 01/03/2015 01:00:32
  • 转载请务必保留本文链接:https://www.ttlsa.com/mysql/how-to-copy-online-database-for-testing/