create_remote_indexes.py 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142
  1. import os
  2. import sys
  3. import paramiko
  4. from dotenv import load_dotenv
  5. sys.stdout.reconfigure(encoding='utf-8')
  6. sys.stderr.reconfigure(encoding='utf-8')
  7. repo_root = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
  8. load_dotenv(dotenv_path=os.path.join(repo_root, ".env"))
  9. host = os.environ.get('SERVER_HOST')
  10. user = os.environ.get('SERVER_USER')
  11. password = os.environ.get('SERVER_PASS')
  12. if password == "your_db_password_here" or not password:
  13. password = None
  14. ssh = paramiko.SSHClient()
  15. ssh.set_missing_host_key_policy(paramiko.AutoAddPolicy())
  16. try:
  17. ssh.connect(host, username=user, password=password, timeout=10)
  18. print("SSH Connected!")
  19. queries = [
  20. "ALTER TABLE food_db.products_core ADD FULLTEXT INDEX idx_prod_ing (product_name, ingredients_text);",
  21. "ALTER TABLE food_db.products_core ADD FULLTEXT INDEX idx_prod_name (product_name);",
  22. "ALTER TABLE food_db.products_core ADD FULLTEXT INDEX idx_ing_text (ingredients_text);"
  23. ]
  24. db_pass = os.environ.get('MYSQL_ROOT_PASSWORD') or 'your_mysql_root_pass'
  25. for q in queries:
  26. print(f"Executing: {q}")
  27. cmd = f"docker exec food_project-mysql-1 mysql -uroot -p{db_pass} -e '{q}'"
  28. stdin, stdout, stderr = ssh.exec_command(cmd)
  29. print("STDOUT:\n", stdout.read().decode('utf-8'))
  30. print("STDERR:\n", stderr.read().decode('utf-8'))
  31. except Exception as e:
  32. print(f"Error: {e}")
  33. finally:
  34. ssh.close()