# Ruby DBI MySQL: how to specify protocol=tcp

**URL:** <https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776>\
**Category:** Ruby\
**Created:** [April 14, 2008, 11:44pm UTC](https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776 "2008-04-14T23:44:58Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![kyle](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/848f3c/32.png) [@kyle](https://www.ruby-forum.com/u/kyle)\
**Post date:** [April 14, 2008, 11:44pm UTC](https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776/1 "2008-04-14T23:44:58Z")

</div>

Hello! I’m using a ruby script to synchronize a remote (web) MySQL  
database with a local database. I had been remotely accessing the  
database through a non-standard port, but I would much rather use an  
SSH tunnel for security. I can set up the tunnel to point port 3307  
on the local machine to 3306 (MySQL) on the remote host. When using  
mysql from the command line, I’m able to connect if I specify –  
protocol=tcp. Otherwise, MySQL tries to use a socket, and it fails.

Using Ruby DBI::MySQL, I can’t seem to specify --protocol=tcp. I’ve  
put this in both /etc/mysql/my.cnf and ~/.my.cnf so that I no longer  
have to explicitly state it from the command line. Still, my script  
is unable to connect. Here is the connection setup in my code:

mysql = DBI.connect(‘dbi:Mysql:database=dbname;port=3307’, ‘user’,  
‘pass’)

Here’s the error:

/usr/lib/ruby/1.8/DBD/Mysql/Mysql.rb:115:in `error': Can't connect to local MySQL server through socket '/var/run/mysqld/mysqld.sock' (2) (DBI::DatabaseError) from /usr/lib/ruby/1.8/DBD/Mysql/Mysql.rb:171:in`connect’  
from /usr/lib/ruby/1.8/dbi.rb:424:in `connect' from /usr/lib/ruby/1.8/dbi.rb:215:in`connect’  
from slice-inventory-sync.rb:9

(Note: specifying host=localhost does the same and host=remotehost  
fails.)

Any ideas on how I can get --protocol=tcp specified in my script?

Thanks!

-Kyle

---

<div class="post-metadata">

**Author:** ![kyle](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/848f3c/32.png) [@kyle](https://www.ruby-forum.com/u/kyle)\
**Post date:** [April 15, 2008, 7:15am UTC](https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776/2 "2008-04-15T07:15:48Z")

</div>

> mysql = DBI.connect(‘dbi:Mysql:database=dbname;port=3307’, ‘user’,  
> ‘pass’)  
> yeah try specifying the host as either ‘127.0.0.1’ or ‘localhost’ – one  
> of the two ignores the sock.  
> You can also take a look at  
> [Google Code Archive - Long-term storage for Google Code Project Hosting.](http://code.google.com/p/ruby-roger-useful-functions/source/browse/trunk/syncer.rb)  
> for some nice references on how to build a solid version of what you’re  
> building.  
> 🙂

---

<div class="post-metadata">

**Author:** ![kyle](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/848f3c/32.png) [@kyle](https://www.ruby-forum.com/u/kyle)\
**Post date:** [April 15, 2008, 5:03pm UTC](https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776/3 "2008-04-15T17:03:28Z")

</div>

Roger,

Thanks for the tips! I had tried specifying host=localhost, but I  
hadn’t tried host=127.0.0.1. It works! Bizarre…

Thanks for the link, too. It’s definitely more robust than what I  
have, but I’m happy with my solution for now. If I build another sync  
script some time, I’ll take some good ideas from that program.

-Kyle

---

<div class="post-metadata">

**Author:** ![kyle](https://www.ruby-forum.com/letter_avatar_proxy/v4/letter/k/848f3c/32.png) [@kyle](https://www.ruby-forum.com/u/kyle)\
**Post date:** [April 15, 2008, 5:07pm UTC](https://www.ruby-forum.com/t/ruby-dbi-mysql-how-to-specify-protocol-tcp/134776/4 "2008-04-15T17:07:28Z")

</div>

Kyle wrote:

> Roger,
> 
> Thanks for the tips! I had tried specifying host=localhost, but I  
> hadn’t tried host=127.0.0.1. It works! Bizarre…  
> yeah it’s a mysql thing. I have no idea why they did that.

The one I was most happy to discover was how to use compression. That  
rocked 🙂
