From 47d3741dcc9e4cb4f47a2f19229eea839dbc7516 Mon Sep 17 00:00:00 2001 From: Lynn Date: Mon, 13 Apr 2026 20:45:11 +0800 Subject: [PATCH] Feat: migrate script (#14076) ### What problem does this PR solve? Add command line arguments for mysql config. ### Type of change - [x] Other (please describe): tool scripts. --- tools/scripts/README.md | 33 +++++++++++++++++++------- tools/scripts/mysql_migration.py | 40 ++++++++++++++++++++++++++++---- 2 files changed, 61 insertions(+), 12 deletions(-) diff --git a/tools/scripts/README.md b/tools/scripts/README.md index 19ce229402..cd7ebf075b 100644 --- a/tools/scripts/README.md +++ b/tools/scripts/README.md @@ -72,13 +72,20 @@ tenant_model (depends on tenant_model_provider and tenant_model_instance) python mysql_migration.py [OPTIONS] ``` -| Option | Short | Description | -|--------|-------|-------------| -| `--config` | `-c` | Path to YAML config file (required) | -| `--stages` | `-s` | Comma-separated list of stages to run | -| `--list-stages` | `-l` | List available stages and exit | -| `--execute` | `-e` | Execute full migration (create tables and migrate data) | -| `--create-table-only` | - | Only create target tables, skip data migration | +| Option | Short | Description | Default | +|--------|-------|-------------|---------| +| `--host` | - | MySQL host | `localhost` | +| `--port` | - | MySQL port | `3306` | +| `--user` | - | MySQL user | `root` | +| `--password` | - | MySQL password | (empty) | +| `--database` | - | MySQL database name | `rag_flow` | +| `--config` | `-c` | Path to YAML config file | - | +| `--stages` | `-s` | Comma-separated list of stages to run | - | +| `--list-stages` | `-l` | List available stages and exit | - | +| `--execute` | `-e` | Execute full migration (create tables and migrate data) | `False` | +| `--create-table-only` | - | Only create target tables, skip data migration | `False` | + +> **Note**: MySQL connection can be configured via command line arguments (`--host`, `--port`, `--user`, `--password`, `--database`) or via a YAML config file (`--config`). Command line arguments take precedence over config file values. ### Execution Modes @@ -86,7 +93,11 @@ The script has three mutually exclusive modes: 1. **Dry-Run Mode** (default): Check only, no database writes ```bash + # Using config file python mysql_migration.py --stages tenant_model_provider --config config.yaml + + # Using command line MySQL connection + python mysql_migration.py --stages tenant_model_provider --host localhost --port 3306 --user root ``` 2. **Create Table Only Mode**: Create target tables without migrating data @@ -129,7 +140,10 @@ mysql: # List all available stages python mysql_migration.py --list-stages -# Dry run single stage +# Dry run single stage using command line MySQL connection +python mysql_migration.py --stages tenant_model_provider --host localhost --port 3306 --user root --password secret + +# Dry run single stage using config file python mysql_migration.py --stages tenant_model_provider --config /path/to/config.yaml # Create tables only for multiple stages @@ -137,6 +151,9 @@ python mysql_migration.py --stages tenant_model_provider,tenant_model_instance - # Execute full migration for all stages (in dependency order) python mysql_migration.py --stages tenant_model_provider,tenant_model_instance,tenant_model --config /path/to/config.yaml --execute + +# Use config file with command line password override +python mysql_migration.py --stages tenant_model_provider --config /path/to/config.yaml --password mypassword --execute ``` ## Output Interpretation diff --git a/tools/scripts/mysql_migration.py b/tools/scripts/mysql_migration.py index 1e7aeeb21e..2c1232d86a 100644 --- a/tools/scripts/mysql_migration.py +++ b/tools/scripts/mysql_migration.py @@ -795,9 +795,12 @@ Examples: # List available stages python mysql_migration.py --list-stages - # Dry run (default - check only, no write) + # Dry run (default - check only, no write) with config file python mysql_migration.py --stages tenant_model_provider --config /path/to/config.yaml + # Dry run with command line MySQL connection + python mysql_migration.py --stages tenant_model_provider --host localhost --port 3306 --user root --password secret + # Create target tables only (no data migration) python mysql_migration.py --stages tenant_model_provider --config /path/to/config.yaml --create-table-only @@ -809,6 +812,18 @@ Examples: """ ) + # MySQL connection options + parser.add_argument('--host', type=str, default='localhost', + help='MySQL host (default: localhost)') + parser.add_argument('--port', type=int, default=3306, + help='MySQL port (default: 3306)') + parser.add_argument('--user', type=str, default='root', + help='MySQL user (default: root)') + parser.add_argument('--password', type=str, default='', + help='MySQL password (default: empty)') + parser.add_argument('--database', type=str, default='rag_flow', + help='MySQL database name (default: rag_flow)') + # Configuration options parser.add_argument('--config', '-c', type=str, help='Path to YAML config file') @@ -834,12 +849,29 @@ Examples: stages = [s.strip() for s in args.stages.split(',')] - # Load configuration + # Load configuration: command line args take precedence over config file if args.config: config = MigrationConfig.from_config_file(args.config) + # Override with command line args if provided + if args.host != 'localhost': + config.host = args.host + if args.port != 3306: + config.port = args.port + if args.user != 'root': + config.user = args.user + if args.password != '': + config.password = args.password + if args.database != 'rag_flow': + config.database = args.database else: - logging.error("No config file specified. Use --config to specify config file.") - sys.exit(1) + # Use command line args directly + config = MigrationConfig( + host=args.host, + port=args.port, + user=args.user, + password=args.password, + database=args.database + ) logger.info(f"MySQL Configuration: host={config.host}, port={config.port}, " f"user={config.user}, database={config.database}")