Database aanroepen vanaf verschillend domein?
Ik heb bij de ene verbinding met de host (dmv IP) maar bij de ander krijg ik dan de melding: "Failed to connect to MySQL: No route to host". Kan dat niet, of doe ik nog wat anders verkeerd?
Gewijzigd op 28/08/2017 14:14:39 door G Jansma
Alvast bedankt!
Gewijzigd op 28/08/2017 15:04:25 door - Ariën -
Het is geheel afhankelijk van hoe je hoster zijn zaken inricht. Als externe verbindingen niet worden toegestaan zul je vanaf een andere server niet kunnen verbinden. Soms worden uitgaande verbindingen ook actief geweigerd. Dat is iets om vooraf te controleren dus.
Controleer of database A extern benaderd mag worden. Meestal een instelling in een configuratiescherm.
Of er moet in database A een gebruiker aangemaakt worden met als server/host het IP nummer of domeinnaam van host B.
Vanaf host B maakt je dan een mysql connect met die gebruiker naar host/database A.
Een andere oplossing is om in database B een Federated table naar Host A te maken.
https://dev.mysql.com/doc/refman/5.5/en/federated-create-connection.html
Op host B maak je een local connect naar database B en vraag je daar de data op.
MySQL van database B maakt dan een verbinding met database A en haalt daar de data op en toont die op host B alsof het lokaal was opgevraagd.
Oefen.
Bij de meeste hostingproviders is poort 3306 vanwege de veiligheid gesloten, maar zelf raad ik een verbinding met een database op een extern netwerk niet aan. Als die traag reageert, dan staat de browser van je bezoeker ook reactie te wachten.
Gewijzigd op 28/08/2017 15:14:25 door G Jansma
Klopt ja, het gaat er dan wel om dat A de master is. Dus server B kan dan, als alle firewallregels goed zijn ingesteld, verbinding maken met server A.
Handig dat ik weet dat ik op poort 3306 moet zoeken, had er nog nooit van gehoord. Na wat speurwerk op de sites van de hosting gevonden dat het openstaat en hoe het moet. Nou heb ik B > A voor elkaar, maar A > B wil maar niet lukken. Krijg nog steeds de melding 'No route to host'.
Dus dan wordt de routering niet toegelaten vanaf A, of geweigerd op B. Even contact opnemen met de hosters dus.
Wat voor hostname gebruik je? Of gebruik je een IP-adres?
10.3.0.176 (stond er al, gebruik ik met aanroepen Mysql/PHP)
127.0.0.1 (stond er al)
localhost (stond er al)
185.56.145.137 > (toegevoegd B)
www83.totaalholding.nl > (toegevoegd B)
B: (Neostrada - cPanel)
185.56.145.137 (stond er al, gebruik ik met aanroepen Mysql/PHP)
vserver89.axc.nl > (toegevoegd A)
Maar zonder dat ik iets had toegevoegd bij A gaf website B ook al 'No route to host' aan.
Zoals Ben zegt, neem contact op met beide hostingpartijen. Ergens zit een blokkade.
Als ik dat doe komt er 185.182.56.229 uit. Als ik dat vervolgens in mijn config stop werkt het wel op B.
$con = mysqli_connect("185.182.56.229","user","password","table");
Alleen werkt het dan op A zelf niet als ik dat IP gebruik.
op A gebruik je gewoon localhost, al is het alleen maar zodat hij dan de unix socket pakt, en deze is sneller.
Als je wilt kijken of je raam van je kamer open is, dan ga je toch ook niet naar buiten om dat uit te zoeken, om vervolgens weer naar binnen te gaan? ;-)
Maar B > A werkt dus wel op zowel B als A met hetzelfde IP in de config. Maar A > B dus kennelijk niet, dat vind ik dan merkwaardig.
Dat ligt aan de serverconfiguratie. Ik laat mysql ook niet op de lokale interfaces luisteren, omdat daar al een prima bruikbare unix socket staat. Het kan op verschillende niveaus worden dichtgezet, als je server bijvoorbeeld achter een 1:1 NAT zit heeft het gebruikte IP geen enkele relatie tot het gebruikte IP. Vanaf de binnenzijde is dit IP vaak onbereikbaar. Maar dit is een kwestie van opvragen wat de IP's aan de interfaces (eth0) zijn, of even navragen bij de hoster.
Ok, weer een hoop wijzer geworden. Was dus toch niet zo'n domme vraag. Bedankt!
Domme vragen bestaan niet... ;-)