• This is Slide 1 Title

    This is slide 1 description. Go to Edit HTML and replace these sentences with your own words. This is a Blogger template by Lasantha - PremiumBloggerTemplates.com...

  • This is Slide 2 Title

    This is slide 2 description. Go to Edit HTML and replace these sentences with your own words. This is a Blogger template by Lasantha - PremiumBloggerTemplates.com...

  • This is Slide 3 Title

    This is slide 3 description. Go to Edit HTML and replace these sentences with your own words. This is a Blogger template by Lasantha - PremiumBloggerTemplates.com...

Monday, 17 March 2014

Version Control with Subversion


This documentation was written to describe Subversion 1.5. If you are running a newer version of Subversion, we strongly suggest that you visit http://www.svnbook.com/ and consult the version of this book appropriate for your version of Subversion.

Version Control with Subversion

For Subversion 1.5

(Compiled from r3305)

Ben Collins-Sussman

Brian W. Fitzpatrick

C. Michael Pilato

This work is licensed under the Creative Commons Attribution License. To view a copy of this license, visit http://creativecommons.org/licenses/by/2.0/ or send a letter to Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
(TBA)

Table of Contents
Foreword
Preface
Audience
How to Read This Book
Conventions Used in This Book
Organization of This Book
This Book Is Free
Acknowledgments
From Ben Collins-Sussman
From Brian W. Fitzpatrick
From C. Michael Pilato
What Is Subversion?
Is Subversion the Right Tool?
Subversion's History
Subversion's Architecture
Subversion's Components
What's New in Subversion
1. Fundamental Concepts
The Repository
Versioning Models
The Problem of File Sharing
The Lock-Modify-Unlock Solution
The Copy-Modify-Merge Solution
Subversion in Action
Subversion Repository URLs
Working Copies
Revisions
How Working Copies Track the Repository
Mixed Revision Working Copies
Updates and commits are separate
Mixed revisions are normal
Mixed revisions are useful
Mixed revisions have limitations
Summary
2. Basic Usage
Help!
Getting Data into Your Repository
svn import
Recommended Repository Layout
Initial Checkout
Disabling Password Caching
Authenticating As a Different User
Basic Work Cycle
Update Your Working Copy
Make Changes to Your Working Copy
Examine Your Changes
See an overview of your changes
Examine the details of your local modifications
Undoing Working Changes
Resolve Conflicts (Merging Others' Changes)
Viewing conflict differences interactively
Resolving conflict differences interactively
Postponing conflict resolution
Merging conflicts by hand
Discarding your changes in favor of a newly fetched revision
Punting: Using svn revert
Commit Your Changes
Examining History
Generating a List of Historical Changes
Examining the Details of Historical Changes
Examining local changes
Comparing working copy to repository
Comparing repository revisions
Browsing the Repository
svn cat
svn list
Fetching Older Repository Snapshots
Sometimes You Just Need to Clean Up
Disposing of a Working Copy
Recovering from an Interruption
Summary
3. Advanced Topics
Revision Specifiers
Revision Keywords
Revision Dates
Properties
Why Properties?
Manipulating Properties
Properties and the Subversion Workflow
Automatic Property Setting
File Portability
File Content Type
File Executability
End-of-Line Character Sequences
Ignoring Unversioned Items
Keyword Substitution
Sparse Directories
Locking
Creating Locks
Discovering Locks
Breaking and Stealing Locks
Lock Communication
Externals Definitions
Peg and Operative Revisions
Changelists
Creating and Modifying Changelists
Changelists As Operation Filters
Changelist Limitations
Network Model
Requests and Responses
Client Credentials Caching
Summary
4. Branching and Merging
What's a Branch?
Using Branches
Creating a Branch
Working with Your Branch
The Key Concepts Behind Branching
Basic Merging
Changesets
Keeping a Branch in Sync
Mergeinfo and Previews
Undoing Changes
Resurrecting Deleted Items
Advanced Merging
Cherrypicking
Merge Syntax: Full Disclosure
Merges Without Mergeinfo
More on Merge Conflicts
Blocking Changes
Merge-Sensitive Logs and Annotations
Noticing or Ignoring Ancestry
Merges and Moves
Blocking Merge-Unaware Clients
The Final Word on Merge Tracking
Traversing Branches
Tags
Creating a Simple Tag
Creating a Complex Tag
Branch Maintenance
Repository Layout
Data Lifetimes
Common Branching Patterns
Release Branches
Feature Branches
Vendor Branches
General Vendor Branch Management Procedure
svn_load_dirs.pl
Summary
5. Repository Administration
The Subversion Repository, Defined
Strategies for Repository Deployment
Planning Your Repository Organization
Deciding Where and How to Host Your Repository
Choosing a Data Store
Berkeley DB
FSFS
Creating and Configuring Your Repository
Creating the Repository
Implementing Repository Hooks
Berkeley DB Configuration
Repository Maintenance
An Administrator's Toolkit
svnadmin
svnlook
svndumpfilter
svnsync
fsfs-reshard.py
Berkeley DB utilities
Commit Log Message Correction
Managing Disk Space
How Subversion saves disk space
Removing dead transactions
Purging unused Berkeley DB logfiles
Berkeley DB Recovery
Migrating Repository Data Elsewhere
Filtering Repository History
Repository Replication
Repository Backup
Managing Repository UUIDs
Moving and Removing Repositories
Summary
6. Server Configuration
Overview
Choosing a Server Configuration
The svnserve Server
svnserve over SSH
The Apache HTTP Server
Recommendations
svnserve, a Custom Server
Invoking the Server
svnserve as daemon
svnserve via inetd
svnserve over a tunnel
svnserve as Windows service
Built-in Authentication and Authorization
Create a users file and realm
Set access controls
Using svnserve with SASL
Authenticating with SASL
SASL encryption
Tunneling over SSH
SSH configuration tricks
Initial setup
Controlling the invoked command
httpd, the Apache HTTP Server
Prerequisites
Basic Apache Configuration
Authentication Options
Setting up HTTP authentication
SSL certificate management
Authorization Options
Blanket access control
Per-directory access control
Disabling path-based checks
Extra Goodies
Repository browsing
Apache logging
Write-through proxying
Other Apache features
Path-Based Authorization
Supporting Multiple Repository Access Methods
7. Customizing Your Subversion Experience
Runtime Configuration Area
Configuration Area Layout
Configuration and the Windows Registry
Configuration Options
Servers
Config
Localization
Understanding Locales
Subversion's Use of Locales
Using External Editors
Using External Differencing and Merge Tools
External diff
External diff3
Summary
8. Embedding Subversion
Layered Library Design
Repository Layer
Repository Access Layer
Client Layer
Inside the Working Copy Administration Area
The Entries File
Pristine Copies and Property Files
Using the APIs
The Apache Portable Runtime Library
URL and Path Requirements
Using Languages Other Than C and C++
Code Samples
Summary
9. Subversion Complete Reference
The Subversion Command-Line Client: svn
svn Options
svn Subcommands
svn add
svn blame
svn cat
svn changelist
svn checkout
svn cleanup
svn commit
svn copy
svn delete
svn diff
svn export
svn help
svn import
svn info
svn list
svn lock
svn log
svn merge
svn mergeinfo
svn mkdir
svn move
svn propdel
svn propedit
svn propget
svn proplist
svn propset
svn resolve
svn resolved
svn revert
svn status
svn switch
svn unlock
svn update
svnadmin
svnadmin Options
svnadmin Subcommands
svnadmin crashtest
svnadmin create
svnadmin deltify
svnadmin dump
svnadmin help
svnadmin hotcopy
svnadmin list-dblogs
svnadmin list-unused-dblogs
svnadmin load
svnadmin lslocks
svnadmin lstxns
svnadmin recover
svnadmin rmlocks
svnadmin rmtxns
svnadmin setlog
svnadmin setrevprop
svnadmin setuuid
svnadmin upgrade
svnadmin verify
svnlook
svnlook Options
svnlook Subcommands
svnlook author
svnlook cat
svnlook changed
svnlook date
svnlook diff
svnlook dirs-changed
svnlook help
svnlook history
svnlook info
svnlook lock
svnlook log
svnlook propget
svnlook proplist
svnlook tree
svnlook uuid
svnlook youngest
svnsync
svnsync Options
svnsync Subcommands
svnsync copy-revprops
svnsync help
svnsync initialize
svnsync synchronize
svnserve
svnserve Options
svndumpfilter
svndumpfilter Options
svndumpfilter Subcommands
svndumpfilter exclude
svndumpfilter include
svndumpfilter help
svnversion
svnversion
mod_dav_svn
mod_dav_svn Configuration Directives
mod_authz_svn
mod_authz_svn Configuration Directives
Subversion Properties
Versioned Properties
Unversioned Properties
Repository Hooks
start-commit
pre-commit
post-commit
pre-revprop-change
post-revprop-change
pre-lock
post-lock
pre-unlock
post-unlock
A. Subversion Quick-Start Guide
Installing Subversion
High-Speed Tutorial
B. Subversion for CVS Users
Revision Numbers Are Different Now
Directory Versions
More Disconnected Operations
Distinction Between Status and Update
Status
Update
Branches and Tags
Metadata Properties
Conflict Resolution
Binary Files and Translation
Versioned Modules
Authentication
Converting a Repository from CVS to Subversion
C. WebDAV and Autoversioning
What Is WebDAV?
Autoversioning
Client Interoperability
Standalone WebDAV Applications
Microsoft Office, Dreamweaver, Photoshop
cadaver, DAV Explorer
File-Explorer WebDAV Extensions
Microsoft Web Folders
Nautilus, Konqueror
WebDAV Filesystem Implementation
WebDrive, NetDrive
Mac OS X
Linux davfs2
D. Copyright
Index

How To Set Up An SVN Repository In 7 Simple Steps

AJ Roach Profile Photo
A. J. Roach

on

 
May 25, 2010

How To Set Up An SVN Repository In 7 Simple Steps

For some time now, I've wanted to have an svn set up on my shared web host similar to what we have here at civicactions.  Having to make changes on my local machine for any personal (non-civicactions client) sites, then scp those files up to my server is ridiculous -- especially since when working on client sites, I've become so used to simply commiting the changes to a repository and then updating that repository on the server side.  All that said though, I kept putting off the svn set up because as a simple drupal and civicrm developer, I was afraid that a system admin task like setting up svn would be too involved and maybe a bit over my head.  Turns out, I should've done it months ago.  It's crazy easy!

Step 1

Make sure that svn is installed on your web host.  Just ssh into your account and type
which svn
Lucky for me, my shared host already had svn installed at /usr/bin/svn.  If you're not so lucky, then you'll need to install svn yourself.  Depending on your system and your set up, there are multiple ways to do this.  For this and all other svn questions, I'd recommend the svn red book.  One of the finest examples of open source software documentation I've ever seen.  Extremelyhelpful.  Of course, if you're on a shared host like me, then you probably won't have the access you need in order to install svn.  In that case, contact your system administrator and ask them to install svn for you.

Step 2

Create your repository. Once svn is installed on your host, you can proceed with the repository set up.  Just ssh into your server and create a repository wherever you'd like it.  In my case I put my repository in my user directory.  I would've preferred to have it in the root directory, but because it's a shared host, I don't have write access to anything outside of my user directory.  To create the repository, issue the following command:
svnadmin create ~/myrepository

Step 3

Create your SVN user: Now that your repository is successfully set up, you'll need to create an svn user.  Simply open the svnserve.conf file in the editor of your choice:
pico ~/myrepository/conf/svnserve.conf
and add the following:
anon-access = none
auth-access = write
password-db = passwd
Now you'll need to create a password file:
pico ~/myrepository/conf/passwd
Add a line in that file for your user in the format =
exampleuser = examplepassword

Step 4

Create a hierarchy for your repository: This step is optional.  It's not needed in order to get svn to work properly, but if you're planning on keeping multiple projects under revision control, then it's a good idea to get organized before you start importing those projects.  In my case, I'll be working on upgrading one of my sites from Drupal 5 to Drupal 6 soon (yes, I know...  I've been putting that off too.), so I wanted a trunk for the Drupal 5 project and a trunk for the soon-to-be-upgraded Drupal 6 project.  You can create directories in your repository in almost the same way you create them on your file system, using mkdir.  You'll need to use svn's mkdir command though like so: NOTE: Relative paths don't seem to work here.  svn doesn't seem to like '~', so remember to start with the root directory (so it'll look like 'file:///root/rest/of/path...'.  With three forward slashes.
svn mkdir file:///path to your repository/myrepository/d5
svn mkdir file:///path to your repository/myrepository/d6
Now you're almost there.  Next, you'll need to import the files you want to keep under version control into your new repository.  Do that with the svn import command.
svn import /path to your project/myD5project file:///path to your repository/myrepository/d5
svn import /path to your project/myD6project file:///path to your repository/myrepository/d6

Step 5

Run the svn server as daemon:
svnserve -d

Step 6

Check out your repository onto your local machine: Back on your local machine, go to where you keep your nerd stuff.  In my case it's in ~/workspace.  Then use the svn co command to check out a copy of your project.
cd ~/workspace
svn co svn+ssh://username@hostname/path to repository/myrepository/d6

Step 7

Go get a tasty beverage and rest comfortably in the knowledge that you'll never have to scp another file again.  Well, except for maybe the occasional mysqldump file...
You might check to make sure that you have the proper directories listed in step 4. I've seen that error when i either had a trailing slash, However, if I were doing this now for my own use, I would probably use Git instead of svn.You should keep captcha right below the text area, I missed to see it or just hit enter Thank you. 
dear  siri want how to  configure for connect svn sever linux to windows.
On step 4 I get the following error:svn: '.' is not a working copy
You might check to make sure that you have the proper directories listed in step 4. I've seen that error when i either had a trailing slash, or was missing a period to indicate the current directory.  You can also try "svn cleanup ." from the directory you are having trouble with.
i created a folder "d5" with svn mkdir. then i import a file "whatever" into that folder using svn import but i get error:svn: Path 'file:///.........../db5' already existsbut if i introduce ANOTHER_FOLDER then it imports it.svn mkdir file:///path to your repository/myrepository/d6svn import /path to your project/myD5project file:///path to your repository/myrepository/d5/ANOTHER_FOLDER 
i created a folder "asdf" with svn mkdir. then i import a file "whatever" into that folder using svn import but i get error svn path already exists.
svn: Could not use external editor to fetch log message; consider setting the $SVN_EDITOR environment variable or using the --message (-m) or --file (-F) optionssvn: None of the environment variables SVN_EDITOR, VISUAL or EDITOR is set, and no 'editor-cmd' run-time configuration option was found can any one guide me here?
Not sure why you would use svnserve, much better to use apache to serve svn.http://www.duchnik.com/tutorials/vc/installing-and-configuring-svn-on-ce...cheers! 
Do you know if you have to have Apache 2 installed, or will good old Apache 1.3.42 do? 
I did this a few years ago, not on a shared hosting account but on a VPS I have at Slicehost. Slicehost has an amazing collection of well-written articles on all kinds of sysadmin and LAMP topics. With their articles on Subversion I was able to get my repo up and running easily.
That series of articles will lead you through the process and give you a bit more detail about security, multiple repositories, and while very easy to follow, explain some of the 'why' behind the 'how'.
Here are some slides from a presentation a colleague and I did on Git and SVN a month or two ago: Version Control with SVN and Git.
However, if I were doing this now for my own use, I would probably use Git instead of svn.
Thank you for writing this, I was really looking for it. So far I have only used on Windows SVN without command line but mouse, right click left click to checkout or commit etc and only for local development never tried at hosting company account.
I wish you would have created a screenshot based version.
Info may be helpful to you:
a. when I searched your page was in top 6 on google
b. I can't see this specific article/post at any other web page
c. What hosting company you did this svn stuff, mine is Godaddy
d. I often get the development by myself or independent contractor so want to keep track using svn type tool/process

SUGGESTION:
You should keep captcha right below the text area, I missed to see it or just hit enter

Thank you.


Sunday, 9 February 2014

MySQL on Ubuntu

MySQL on Ubuntu

MySQL Installation

Install relevant the packages:
$ sudo apt-get install mysql-client mysql-server
The Ubuntu post-installation presents a dialog three times in which you have the option to give the MySQL server a root password. The reason for the multiplicity of root password entry is that there are multiple (redundant) hosts: localhost, 127.0.0.1, and the system hostname. For simplicity, each time:
tab to OK, press Enter without providing a password
The installation process starts the MySQL service automatically. In a production or mulitiuser environment, you would certainly want to give a password, but it's convenient to not do so when you're learning how to administer MySQL.
The MySQL databases are held in the directory /var/lib/mysql. If you ever need to do so, the helper script mysql_install_db is executed to perform the initial setup which creates to create themysql (administrative) database and the root user.

The MySQL shell client

Assuming that the MySQL installation directory's bin subdiretory in your PATH, you can use the mysql executable to connect to and deliver SQL commands to your MySQL database via a command-line SQL interpreter.
The MySQL adminstrator's user name is "root". The MySQL DBMS contains an adminstrative database named mysql in which all access information is stored. The root user has global priviledges to do any modifications or additions.
We only ever want to use the administrative database, mysql, for it's intended purpose, to control access to other databases. Furthermore, we usually want to avoid accessing the MySQL DBMS asroot user because there is always the remote possibility that we inadvertently alter the tables in the mysql database and thereby foul up the DBMS — not every author shares my reticence of being MySQL root user.
To run some basic tests it's useful to have an unpriviledged, password-less, "guest" user which can access a test database. On other systems, the MySQL initialization may create the testdatabase which can be accessed by any MySQL user. An anonymous user may also often created. The recent Ubuntu versions do none of these creations.
The following sequence of commands are meant to create some basic setup features and show the effects (highlighted ones most important): There are a number of repeated commands which can easily be accessed by using the "up arrow" key.
$ mysql -u root
mysql> show databases;
mysql> create database test;                         (it may already exist)
mysql> show databases;
mysql> select user,host,password from mysql.user;
mysql> create user guest@localhost;                  (it may already exist)
mysql> select user,host,password from mysql.user;
mysql> select user,host from mysql.db;
mysql> grant all on test.* to guest@localhost;
mysql> select user,host from mysql.db;
mysql> quit
Test the effectiveness by accessing the test database as the guest user:
$ mysql -u guest test
If for some reason this doesn't work, try forcing a reload of the administrative database:
$ mysqladmin -u root reload
Compare the differences in priviledges between the root and guest users (the \G statement terminator is used to field information in list form instead of tabular form):
$ mysql -u root mysql
mysql> select * from user where user='root' and host='localhost' \G
mysql> select * from user where user='guest' and host='localhost' \G

SQL syntax learning examples

Here are some examples you can use to help learn basic SQL commands. The test database accessible by the guest user without password is assumed. Start a command shell and, from the command-line, execute:
$ mysql -u guest               
mysql> use test;
mysql> create table things (thing varchar(10), qty int);
mysql> show tables;
mysql> describe things;
mysql> insert into things values ( 'book', 10 );
mysql> insert into things values ( 'pencil', 4 ), ( 'book', 5 );
mysql> select * from things;
mysql> delete from things where thing='book';
mysql> select * from things;
mysql> insert into things values  ('table', 2), ('chair',12);
mysql> select * from things;
mysql> update things set qty=qty-1 where qty>10;
mysql> select * from things;
mysql> update things set qty=qty+1 where thing='table';
mysql> select * from things;
mysql> drop table things;
mysql> quit

Using passwords with mysql client

If a user access is password-protected, the mysql client requires the usage of the -p option to provide the password. This can be done in one of two ways:
  1. The simple, unadorned -p option, with prompt:
    $ mysql -p  -u ....
    Enter password: MY-PASSWORD
    
  2. The -p option with password appended (useful for testing, but not a good idea in general):
    $ mysql -pMY-PASSWORD  -u ....
    

Discussion points

Creating a MySQL users with a password

If you want to create a user some_user with the password some_password, the replacement command would be this:
mysql> create user some_user@localhost identified by 'some password';

Establishing privileges for a mysql user

We saw above how the mysql command-line interpreter can grant privileges by which users can access the databases. Here are some other examples:
  1. To create a new highly-privileged user, priv@host (host the desired entry host):
    $ mysql -u root
    mysql> grant all on *.* to priv@host;
    
  2. To give a user restricted@host "read only" privileges on somedb, we replace the "all" in grant by the desired restricted access:
    $ mysql -u root
    mysql> grant select on somedb.* to restricted@host;
    

MySQL Command-line administration

MySQL software provides a number of useful commands to manipulate its databases, including:
  • mysqladmin: basic administration commands
  • mysqldump: dump the contents of table(s) in a database
  • mysqlshow: show table/fields in a database
  • mysql command line interpreter for entering SQL commands
You can see the entire set of choices from the shell using tab completion by doing:
$ mysql[TAB][TAB]
For example, try these commands:
$ mysqlshow -u root
$ mysqlshow -u root mysql
$ mysqlshow -u root mysql user
$ mysqldump -u root mysql user
To ensure that changes made to the mysql database are not picked up, do one of this::
$ mysqladmin -u root reload
There's also the "refresh" command which has a somewhat different outcome.

Backup and reload

The mysql commands provide an excellent scheme by which a database can be "backed up" and then "reloaded". Do the backup like this:
$ mysqldump -u root somedb > somedb.sql
The somedb.sql file contains the data in all the tables plus the commands needed to recreate these tables. A restoration from an non-existent database would be done like this:
$ mysql -u root 
mysql> create somedb
mysql> use somedb
mysql> source somedb.sql

MySQL access principles

MySQL is a network-oriented DBMS. Client programs may reside on different hosts than the server. The access rights of MySQL client has to a MySQL DBMS database is determined at the beginning by three factors managed by the administrative mysql database:
  • the user specified by the client
  • the host on which the client operates
  • the database that the client is trying to access
Three tables are consulted to determine access rights:
  1. user table: When the client on host connects to the MySQL server, the pair
    (user, host)
    
    is matched against the (user,host) values in the rows of the user table. If no such user or host exists, an empty is used to match. If the password field is non-empty the client must provide the password. The client obtains global privileges from the remaining fields in the record.
  2. host table: When a client on host attempts to use a specific database, the pair:
    (host, database)
    
    is used to match against the entries in the host table, and thereby augment the privileges available to the client when accessing from this host.
  3. db table: Each database, with user information is listed in the db table.
    (user, database)
    
    is used to match against the entries in the db table, and therefore further augment the privileges available to the client as this particular user.
Of the three tables, The db table is the most common place where privileges are assigned for non-root users since it is the most specific to the database.
Further refinements, which we will omit the discuss of these access privileges, governed by dedicated tables in the mysql database:
  • for different tables within a single database (tables_priv)
  • individual access privileges for columns within a database table (columns_priv)
  • access privileges for stored procedures within a database (proc_priv)
A few tests exhibit some of the ideas discussed here:
$ mysql -u root mysql
mysql> describe user;
mysql> select user,host,password from user;
mysql> describe host;
mysql> select host,db from host;
mysql> describe db;
mysql> select user,db from db;
mysql> select * from db where db='test' \G          (mostly 'Y')
The root user has all global privileges and the anonymous user has none. Nevertheless, the anonymous user gains privileges for the test database by matching an entry in the db table.

Using MySQL on an external server

Assume you have a server machine running the MySQL service and you want to connect to it from an external client. This situation is common in an intranet where one might have a dedicated databse server with other clients and or servers using it. It could also be useful on a single computer running virtual machines.
For sake of definiteness, we will assume the server running MySQL is a recent Ubuntu system with Assume that it has a static IP address EXTERNAL_IP_ADDRESS. The client is external and wants to use this MySQL service on this server. Here are the steps necessary:
  1. Deal with the firewall
    If you have a firewall running, then somehow or another, you need to get through to the mysql port (3306) from the outside. On Ubuntu, using the ufw firewall management, look at the output of
    $ sudo ufw status
    
    to see if there is a firewall, and if it is open for the mysql port (with TCP). If not, you can open it by doing:
    $ sudo ufw allow mysql/tcp
    
  2. Have MySQL listen on the external network interface
    By default the MySQL server only listens on an internal socket and the localhost network interface. As root, edit the MySQL configuration file, /etc/mysql/my.cnf and look for the bind-address line for the server:
    [mysqld]
    ...
    bind-address            = 127.0.0.1
    
    Right underneath that line, add this one:
    bind-address            = EXTERNAL_IP_ADDRESS
    
    We need to restart the service for this to take effect, but we can do it after the next change.
  3. Give access to a user from external host
    The guest user we created above only has access from localhost. We need access from all external clients of interest. The easiest way is to make a guest user with access from any host:
    $ mysql -u root
    mysql> drop user guest@localhost;       (if you have already added it)
    mysql> create user guest;               (unspecified host means any)
    mysql> grant all on test.* to guest;
    mysql> select user,host,password from mysql.user;  (host for the guest user is %)
    
That's it. Now restart MySQL to pick up all the changes:
$ sudo restart mysql
If you have the mysql command-line client program on the client, you would use this form to access the MySQL DBMS on the server:
$ mysql -h EXTERNAL_IP_ADDRESS -u guest test

Tunnelling to the MySQL server port

If you only have access to the server through ssh (port 22), then it is possible to set up a tunnel through ssh to the mysql port (3306) and use the tunnel port as an alternative access. This tunnelling setup would be done on the client machine and so is dependent of the operating system. On Windows the PuTTy client can be set up to do the tunneling. Otherwise, the ssh command itself supports a tunneling setup. One point about tunneling is that the mysql command-line client would no longer function because it does not support external access via an alternative port.

© Robert M. Kline