Réplication d'une base de données MySQL distante vers MS SQL Server 2008

10

Je souhaite répliquer le contenu d'une base de données MySQL dans une base de données MS SQL Server 2008.

Est-ce possible? Quelqu'un peut-il décrire les étapes nécessaires pour y parvenir?

Merci.

Jimmy Collins
la source

Réponses:

9

Personnellement, je tirerais la méthode MS SQL contre la poussée de la méthode MySQL. Pourquoi? Eh bien, Windows a des pilotes ODBC MySQL 32 bits et 64 bits prêts à l'emploi et la configuration d'un serveur lié est triviale. J'ai beaucoup de serveurs MySQL liés à MS SQL. De plus, la connexion à MS SQL depuis linux / unix n'est pas toujours géniale et vous n'êtes généralement pas en mesure d'utiliser toutes les fonctionnalités. FreeTDS a ses limites; vous pouvez les toucher plus tôt que tard, alors pourquoi ne pas les sauter. Tout cela suppose que vous exécutez MySQL sur * nix. Sinon, cela se rapproche un peu de 50/50, mais je choisirais quand même de tirer de MS SQL car il semble que ce ne soit pas la base de données "en direct", mettant ainsi la charge sur elle pour tout ETL ou traitement est plus idéal. La solution GoldenGate semble intéressante, mais je suis sûr qu'elle n'est pas gratuite.

Étant donné que j'ai configuré ce type de scénario avec des bases de données MySQL et Oracle répliquées vers MS SQL, je vais vous fournir quelques conseils qui ont fonctionné le mieux pour moi:

  1. Si vous le pouvez, faites de votre mieux pour déterminer comment vous pouvez vous assurer de n'apporter que des modifications delta. Les commandes de fusion peuvent vous y aider. Tronquer une table, puis l'insérer à nouveau gonfle votre journal, utilise la bande passante du réseau et fait généralement perdre du temps.
  2. Si vous traitez beaucoup de données, assurez-vous de séparer les transactions afin de ne pas avoir besoin d'un fichier journal massif. Utilisez des validations ou des points de contrôle explicites lorsque vous avez atteint une étape dont vous savez que vous n'aurez pas besoin de revenir en arrière.
  3. Si la base de données MSSQL sert uniquement à la génération de rapports, faites-y travailler ETL afin de ne pas impacter le serveur MySQL. Utilisez une base de données intermédiaire ou un schéma + groupe de fichiers pour faciliter les choses.
  4. Divisez l'importation des données en étapes. Cela facilite le redémarrage de l'importation là où elle a échoué et / ou le dépannage. Une approche tout ou rien devient rapidement agaçante.
  5. Utilisez des variables dans la mesure du possible pour aider la base de données distante avec les plans de requête et l'utilisation des index. Faites également attention au type d'isolement des transactions dans lequel vous vous trouvez sur la boîte hôte et à l'impact des requêtes de "réplication". Vous ne voulez pas bloquer les écrivains sur une base de données en direct si vous récupérez simplement des données pour les rapports ou l'utilisation du sandbox.

J'espère que les conseils vous aideront!

AndrewSQL
la source
4

La même question a été abordée sur StackOverflow ici: Réplication de MySQL vers MSSQL .

Il semble qu'il existe des solutions de contournement, mais pas une solution très facile.

Je pense que vous devez absolument essayer de créer un package SSIS pour importer les données nécessaires de la base de données MySQL vers la base de données MSSQL. SSIS permet d'importer des données de diverses sources. Ensuite, vous devriez pouvoir planifier le package à l'aide du planificateur de tâches Windows ou des travaux SQL.

Marian
la source
3

Si par réplication vous voulez dire l'envoi de journaux ou quelque chose comme ça, je pense que vous n'avez pas de chance. Cependant, vous pouvez certainement configurer une base de données MySQL en tant que serveur lié et lancer votre propre schéma de réplication. Le plus simple est simplement de faire des instantanés périodiques de toutes les tables en utilisant des instructions tronquer et insérer. Ajoutez de la complexité selon vos besoins.

Larry Smithmier
la source
Je veux dire que je veux qu'une tâche planifiée s'exécute et copie tout le contenu de msqldb vers le serveur sql 2008 db une fois par semaine environ - est-ce possible?
Jimmy Collins
1
N'oubliez pas que tronquer et extraire toutes les données à chaque fois peut être très lent en fonction de la quantité de données impliquées, de la latence du réseau, etc. Ce n'est certainement pas la voie à suivre si vous avez des liaisons réseau petites ou lentes entre les deux bases de données. J'essaie toujours de trouver une méthode qui me permette de tirer des deltas.
AndrewSQL
1
Je suis d'accord, les deltas sont la voie à suivre. Je ne connais pas assez MySQL pour parler des déclencheurs et des bits de ligne sales, mais je suis sûr que quelque chose pourrait être configuré. Côté SQL Server, la planification d'un travail est simple.
Larry Smithmier
3

Vous pouvez utiliser GoldenGate pour MySQL et MS SQL pour ce faire. Il vous suffit d'installer le produit GoldenGate de chaque côté, puis de procéder comme pour une réplication homogène.

Alternativement, pour une réplication "instantané", vous pouvez utiliser un script Python (ou similaire) pour vous connecter simplement aux deux sources de données (en utilisant UnixODBC et FreeTDS pour vous connecter à MS SQL), parcourir les tables en faisant SELECTd'un côté, pour chaque ligne INSERTde l'autre. Comme MSSQL a des transactions et est votre cible, vous pouvez démarrer une transaction, DELETEtout à partir de toutes les tables, faire la copie, puis COMMITcela apparaîtra instantanément en ce qui concerne les utilisateurs connectés sur la cible, il n'y aura pas d'incohérences (sauf si elles existent sur la source bien sûr).

Gaius
la source
Je ne savais pas que c'était quelque chose que vous pouviez faire avec GoldenDate. Je vais devoir en savoir plus à ce sujet; Merci d'avoir partagé!
AndrewSQL
Oracle prend désormais en charge ce produit. Oracle a acquis GoldenGate. Maintenant, ce produit est sous les produits Oracle.